WSL2-Linux-Kernel/drivers
Alan Stern f2eaae197f Driver core: Fix potential deadlock in driver core
There is a potential deadlock in the driver core.  It boils down to
the fact that bus_remove_device() calls klist_remove() instead of
klist_del(), thereby waiting until the reference count of the
klist_node in the bus's klist of devices drops to 0.  The refcount
can't reach 0 so long as a modprobe process is trying to bind a new
driver to the device being removed, by calling __driver_attach().  The
problem is that __driver_attach() tries to acquire the device's
parent's semaphore, but the caller of bus_remove_device() is quite
likely to own that semaphore already.

It isn't sufficient just to replace klist_remove() with klist_del().
Doing so runs the risk that the device would remain on the bus's klist
of devices for some time, and so could be bound to another driver even
after it was unregistered.  What's needed is a new way to distinguish
whether or not a device is registered, based on a criterion other than
whether its klist_node is linked into the bus's klist of devices.  That
way driver binding can fail when the device is unregistered, even if
it is still linked into the klist.

This patch (as782) implements the solution, by adding a new bitflag to
indiate when a struct device is registered, by testing the flag before
allowing a driver to bind a device, and by changing the definition of
the device_is_registered() inline.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2006-09-25 21:08:40 -07:00
..
acorn [PATCH] irq-flags: misc drivers: Use the new IRQF_ constants 2006-07-02 13:58:50 -07:00
acpi Merge trivial low-risk suspend hotkey bugzilla-5918 into release 2006-08-20 21:49:29 -04:00
amba [PATCH] 64bit resource: fix up printks for resources in misc drivers 2006-06-27 09:23:59 -07:00
ata [PATCH] pata_pdc2027x iomem annotations 2006-09-24 20:07:49 -07:00
atm [ATM] he: Fix __init/__devinit conflict 2006-09-24 20:09:33 -07:00
base Driver core: Fix potential deadlock in driver core 2006-09-25 21:08:40 -07:00
block Merge mulgrave-w:git/scsi-misc-2.6 2006-09-23 15:33:43 -05:00
bluetooth [Bluetooth] Enable SCO support for Broadcom HID proxy dongle 2006-07-24 12:44:34 -07:00
cdrom [PATCH] cdrom/gdsc: fix printk format warning 2006-08-27 11:01:33 -07:00
char [PATCH] rtc: lockdep fix/workaround 2006-09-25 17:38:35 -07:00
clocksource [PATCH] GTOD: add scx200 HRT clocksource 2006-06-26 09:58:21 -07:00
connector [PATCH] Process Events: Fix biarch compatibility issue. use __u64 timestamp 2006-07-31 13:28:36 -07:00
cpufreq [CPUFREQ] Fix some more CPU hotplug locking. 2006-09-22 19:15:23 -04:00
crypto [CRYPTO] padlock: Convert padlock-sha to use crypto_hash 2006-09-21 11:46:22 +10:00
dio
dma [I/OAT]: Remove pci_module_init() from Intel I/OAT DMA engine 2006-07-21 14:50:13 -07:00
edac [PATCH] drivers/edac/edac_mc.h must #include <linux/platform_device.h> 2006-08-06 08:57:46 -07:00
eisa Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
fc4 [SCSI] More buffer->request_buffer changes 2006-07-14 09:41:13 -05:00
firmware Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
hwmon [PATCH] hwmon: abituguru timeout fixes 2006-08-26 13:05:19 -07:00
i2c Merge branch 'merge' 2006-08-31 15:45:48 +10:00
ide PM: PCI and IDE handle PM_EVENT_PRETHAW 2006-09-25 21:08:37 -07:00
ieee1394 [PATCH] 1394: fix for recently added firewire patch that breaks things on ppc 2006-08-27 11:01:28 -07:00
infiniband Merge mulgrave-w:git/linux-2.6 2006-09-23 21:03:52 -05:00
input Input: psmouse - fix Intellimouse 4.0 initialization 2006-08-23 00:48:03 -04:00
isdn Merge branch 'master' into upstream 2006-08-07 06:38:41 -04:00
leds [PATCH] net48xx LED cleanups 2006-07-14 21:53:54 -07:00
macintosh [PATCH] asm/backlight.h is ppc-only 2006-09-22 17:48:57 -07:00
mca
md [BLOCK] dm-crypt: trivial comment improvements 2006-09-21 11:46:27 +10:00
media fix broken/dubious driver suspend() methods 2006-09-25 21:08:37 -07:00
message [SCSI] scsi_transport_sas: remove local_attached flag 2006-08-27 22:30:11 -05:00
mfd [ARM] 3727/1: fix ucb initialization on collie 2006-07-11 22:54:15 +01:00
misc [PATCH] irq-flags: misc drivers: Use the new IRQF_ constants 2006-07-02 13:58:50 -07:00
mmc [MMC] Always use a sector size of 512 bytes 2006-09-07 16:01:30 +01:00
mtd [MTD] Whitespace cleanup in SSFDC driver. 2006-09-23 16:20:48 +01:00
net [SUNLANCE]: Mark sparc_lance_probe_one as __devinit. 2006-09-25 16:39:56 -07:00
nubus Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
oprofile
parisc [PATCH] irq-flags: PARISC: Use the new IRQF_ constants 2006-07-02 13:58:52 -07:00
parport [PATCH] irq-flags: misc drivers: Use the new IRQF_ constants 2006-07-02 13:58:50 -07:00
pci PCI: enable driver multi-threaded probe 2006-09-25 21:08:40 -07:00
pcmcia [PATCH] pcmcia: fix ioctl GET_CONFIGURATION_INFO for pcmcia_cards 2006-07-31 13:28:41 -07:00
pnp [PATCH] pnpacpi: reject ACPI_PRODUCER resources 2006-08-06 08:57:49 -07:00
rapidio Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
rtc [PATCH] rtc-s3c.c: fix time setting checks 2006-08-27 11:01:28 -07:00
s390 [SCSI] zfcp: fix: avoid removal of fsf reqs before qdio queues are down 2006-09-23 18:01:46 -05:00
sbus [OPENPROMIO]: Handle current_node being NULL correctly. 2006-09-18 01:47:13 -07:00
scsi fix broken/dubious driver suspend() methods 2006-09-25 21:08:37 -07:00
serial Merge git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc 2006-09-22 12:48:03 -07:00
sh
sn [PATCH] irq-flags: misc drivers: Use the new IRQF_ constants 2006-07-02 13:58:50 -07:00
spi [PATCH] lockdep: annotate on-stack completions 2006-07-03 15:27:09 -07:00
tc [PATCH] irq-flags: misc drivers: Use the new IRQF_ constants 2006-07-02 13:58:50 -07:00
telephony Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/devfs-2.6 2006-06-29 14:19:21 -07:00
usb PM: USB HCDs use PM_EVENT_PRETHAW 2006-09-25 21:08:37 -07:00
video PM: video drivers and PM_EVENT_PRETHAW 2006-09-25 21:08:37 -07:00
w1 [PATCH] w1: remove drivers/w1/w1.h 2006-07-12 15:38:28 -07:00
zorro Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
Kconfig Move libata to drivers/ata. 2006-08-10 07:31:37 -04:00
Makefile Move libata to drivers/ata. 2006-08-10 07:31:37 -04:00