Subject: Re: [PATCH net] net: psp: check for device unregister when creating assoc

From: Willem de Bruijn <[email-masked]>
Date: Thu, 26 Mar 2026 16:46:04 -0400

Jakub Kicinski wrote:
> On Tue, 24 Mar 2026 18:40:00 -0400 Willem de Bruijn wrote:
> > > @@ -320,6 +320,11 @@ int psp_assoc_device_get_locked(const struct genl_split_ops *ops,
> > >  	id = info->attrs[PSP_A_ASSOC_DEV_ID];
> > >  	if (psd) {
> > >  		mutex_lock(&psd->lock);
> > > +		if (!psp_dev_is_registered(psd)) {
> > > +			mutex_unlock(&psd->lock);
> > > +			err = -ENODEV;
> > > +			goto err_psd_put;
> > > +		}  
> > 
> > This ensures that psd is valid for this caller of psp_dev_get_for_sock
> > and psp_dev_tryget, which is its only one (for now).
> > 
> > But is it confusing that psd can be cleared out while a reference is
> > held? Is the assumption that psp_dev_unregister usually holds the last
> > reference and its psp_dev_put will complete the clean up by calling
> > psp_dev_free. If so, would it make sense to defer everything
> > to psp_dev_free?
> > 
> > This is a simpler changes and fixes the issue for the only caller, so
> > LGTM. Just curious.
> 
> Meaning we should add a dance around removal like netdev does?
> Sleep until all the references are gone?
> Subjectively I think it's ugly, and in netdev it didn't really
> prevent races. Dunno, definitely subjective.

Yeah, if any caller of psp_dev_unregister has to know that the device
is gone to proceed, it would require something like that. Okay, I see
that that is needlessly messy.