Re: [PATCH 2/2] USB: core: Fix deadlock in port "disable" sysfs attribute

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Mar 26, 2024 at 10:23:25AM +0100, Greg KH wrote:
> On Tue, Mar 26, 2024 at 10:22:32AM +0100, Greg KH wrote:
> > On Fri, Mar 15, 2024 at 01:06:33PM -0400, Alan Stern wrote:
> > > The show and store callback routines for the "disable" sysfs attribute
> > > file in port.c acquire the device lock for the port's parent hub
> > > device.  This can cause problems if another process has locked the hub
> > > to remove it or change its configuration:
> > > 
> > > 	Removing the hub or changing its configuration requires the
> > > 	hub interface to be removed, which requires the port device
> > > 	to be removed, and device_del() waits until all outstanding
> > > 	sysfs attribute callbacks for the ports have returned.  The
> > > 	lock can't be released until then.
> > > 
> > > 	But the disable_show() or disable_store() routine can't return
> > > 	until after it has acquired the lock.
> > > 
> > > The resulting deadlock can be avoided by calling
> > > sysfs_break_active_protection().  This will cause the sysfs core not
> > > to wait for the attribute's callback routine to return, allowing the
> > > removal to proceed.  The disadvantage is that after making this call,
> > > there is no guarantee that the hub structure won't be deallocated at
> > > any moment.  To prevent this, we have to acquire a reference to it
> > > first by calling hub_get().
> > > 
> > > Signed-off-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>
> > > Cc: <stable@xxxxxxxxxxxxxxx>	# Needs the previous patch in this series
> > 
> > What "previous patch"?  I don't see this as a series even on
> > lore.kernel.org.
> 
> Ah, found it, you sent it only to me for some reason, and not the lists.

Oops.  My apologies... maybe I'm getting rusty at this.  That was 
definitely a mistake, not intentional.

Alan Stern




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux