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

From: Jakub Kicinski <[email-masked]>
Date: Thu, 26 Mar 2026 13:04:59 -0700

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.