linux/drivers/usb/core
Alan Stern 6ff1046409 USB: usbfs: keep async URBs until the device file is closed
The usbfs driver manages a list of completed asynchronous URBs.  But
it is too eager to free the entries on this list: destroy_async() gets
called whenever an interface is unbound or a device is removed, and it
deallocates the outstanding struct async entries for all URBs on that
interface or device.  This is wrong; the user program should be able
to reap an URB any time after it has completed, regardless of whether
or not the interface is still bound or the device is still present.

This patch (as1222) moves the code for deallocating the completed list
entries from destroy_async() to usbdev_release().  The outstanding
entries won't be freed until the user program has closed the device
file, thereby eliminating any possibility that the remaining URBs
might still be reaped.

This fixes a bug in which a program can hang in the USBDEVFS_REAPURB
ioctl when the device is unplugged.

Reported-and-tested-by: Martin Poupe <martin.poupe@upek.com>
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Cc: stable <stable@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2009-03-17 14:01:28 -07:00
..
Kconfig usb core: fix USB_OTG_BLACKLIST_HUB typo 2008-10-17 14:40:54 -07:00
Makefile USB: add a blacklist for devices that can't handle some things we throw at them. 2007-02-23 15:03:46 -08:00
buffer.c USB: fix codingstyle issues in drivers/usb/core/*.c 2008-02-01 14:35:08 -08:00
config.c USB: ehci tolerates some buggy devices 2008-04-24 21:16:35 -07:00
devices.c usb: hub: add check for unsupported bus topology 2008-07-21 15:16:26 -07:00
devio.c USB: usbfs: keep async URBs until the device file is closed 2009-03-17 14:01:28 -07:00
driver.c USB: fix toggle mismatch in disable_endpoint paths 2009-01-27 16:15:32 -08:00
endpoint.c USB: utilize the bus notifiers 2009-01-07 10:00:08 -08:00
file.c USB: remove err() macro from usb core code 2008-10-17 14:41:11 -07:00
generic.c USB: Enhance usage of pm_message_t 2009-01-07 10:00:03 -08:00
hcd-pci.c USB/PCI: Fix resume breakage of controllers behind cardbus bridges 2009-02-17 16:56:31 -08:00
hcd.c USB: mark "reject" field of struct urb as atomic_t 2009-01-07 10:00:08 -08:00
hcd.h USB/PCI: Fix resume breakage of controllers behind cardbus bridges 2009-02-17 16:56:31 -08:00
hub.c USB: fix toggle mismatch in disable_endpoint paths 2009-01-27 16:15:32 -08:00
hub.h wusb: make ep0_reinit available for modules 2008-04-24 21:16:59 -07:00
inode.c USB: fix char-device disconnect handling 2009-01-27 16:15:32 -08:00
message.c USB: usb_get_string should check the descriptor type 2009-02-27 14:40:50 -08:00
notify.c USB : correct comments in usb/core/notify.c 2008-02-01 14:34:44 -08:00
otg_whitelist.h USB: fix codingstyle issues in drivers/usb/core/*.h 2008-02-01 14:35:07 -08:00
quirks.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2008-06-17 18:10:40 -07:00
sysfs.c USB: utilize the bus notifiers 2009-01-07 10:00:08 -08:00
urb.c USB: extension of anchor API to unpoison an anchor 2009-01-07 10:00:11 -08:00
usb.c USB: re-enable interface after driver unbinds 2009-01-07 10:00:13 -08:00
usb.h USB: fix char-device disconnect handling 2009-01-27 16:15:32 -08:00