kernel-fxtec-pro1x/drivers
Tony Battersby c6517b7942 [SCSI] sg: fix races during device removal
sg has the following problems related to device removal:

* opening a sg fd races with removing a device
* closing a sg fd races with removing a device
* /proc/scsi/sg/* access races with removing a device
* command completion races with removing a device
* command completion races with closing a sg fd
* can rmmod sg with active commands

These problems can cause kernel oopses, memory-use-after-free, or
double-free errors.  This patch fixes these problems by using krefs
to manage the lifetime of sg_device and sg_fd.

Each command submitted to the midlevel holds a reference to sg_fd
until the completion callback.  This ensures that sg_fd doesn't go
away if the fd is closed with commands still outstanding.

sg_fd gets the reference of sg_device (with scsi_device) and also
makes sure that the sg module doesn't go away.

/proc/scsi/sg/* functions don't play nicely with krefs because they
give information about sg_fds which have been closed but not yet
freed due to still having outstanding commands and sg_devices which
have been removed but not yet freed due to still being referenced
by one or more sg_fds.  To deal with this safely without removing
functionality, /proc functions now access sg_device and sg_fd while
holding a lock instead of using kref_get()/kref_put().

Signed-off-by: Tony Battersby <tonyb@cybernetics.com>
Acked-by: Douglas Gilbert <dgilbert@interlog.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
2009-03-12 12:58:04 -05:00
..
accessibility
acpi Merge branches 'release', 'bugzilla-12011', 'bugzilla-12632', 'misc' and 'suspend' into release 2009-02-21 22:01:43 -05:00
amba
ata [libata] pata_legacy: for VLB 32bit PIO don't try tricks with slop 2009-02-25 15:30:23 -05:00
atm ATM: misplaced parentheses? 2009-02-18 17:41:38 -08:00
auxdisplay
base PM: Split up sysdev_[suspend|resume] from device_power_[down|up], fix 2009-02-22 22:09:33 +01:00
block xen/blkfront: use blk_rq_map_sg to generate ring entries 2009-02-26 10:45:48 +01:00
bluetooth
cdrom
char m68k: atari - Rename "mfp" to "st_mfp" 2009-02-22 09:23:02 -08:00
clocksource
connector
cpufreq [CPUFREQ] Make ignore_nice_load setting of ondemand work as expected. 2009-02-05 12:25:26 -05:00
cpuidle
crypto crypto: ixp4xx - Fix qmgr_request_queue build failure 2009-03-04 08:01:22 +08:00
dca dca: redesign locks to fix deadlocks 2009-02-02 23:26:57 -08:00
dio
dma [ARM] fix lots of ARM __devexit sillyness 2009-03-03 21:04:04 +00:00
edac
eisa
firewire
firmware Bernhard has moved 2009-02-18 15:37:56 -08:00
gpio
gpu drm: fix double lock typo 2009-03-04 21:49:14 +10:00
hid HID: move tmff and zpff devices from ignore_list to blacklist 2009-02-17 13:25:01 +01:00
hwmon lis3lv02d: add axes knowledge of HP Pavilion dv5 models 2009-02-18 15:37:54 -08:00
i2c Merge master.kernel.org:/home/rmk/linux-2.6-arm 2009-03-03 14:12:41 -08:00
ide ide: fix refcounting in device drivers 2009-02-25 20:28:24 +01:00
idle
ieee1394 Make ieee1394_init a fs-initcall 2009-02-26 10:32:31 -08:00
infiniband
input Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2009-03-02 15:43:03 -08:00
isdn ISDN: fix sc/shmem printk format warning 2009-02-20 00:54:44 -08:00
leds
lguest
macintosh
mca
md md: avoid races when stopping resync. 2009-02-25 13:18:47 +11:00
media Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2009-03-02 15:43:03 -08:00
memstick
message [SCSI] mpt: fix disable lsi sas to use msi as default 2009-02-22 08:51:07 -06:00
mfd mfd: Fix sm501_register_gpio section mismatch 2009-02-17 09:48:05 +01:00
misc hpilo: new pci device 2009-02-27 16:26:22 -08:00
mmc sdhci: Add NO_BUSY_IRQ quirk for Marvell CAFE host chip 2009-03-02 21:48:20 +01:00
mtd Merge master.kernel.org:/home/rmk/linux-2.6-arm 2009-03-03 14:12:41 -08:00
net Merge master.kernel.org:/home/rmk/linux-2.6-arm 2009-03-03 14:12:41 -08:00
nubus
of
oprofile
parisc
parport m68k: atari - Rename "mfp" to "st_mfp" 2009-02-22 09:23:02 -08:00
pci Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6 2009-02-26 14:43:42 -08:00
pcmcia
platform fujitsu-laptop: Use RFKILL support bitmask from firmware 2009-02-21 21:59:55 -05:00
pnp
power pcf50633_charger: Fix typo 2009-02-02 19:53:02 +03:00
ps3
rapidio
regulator
rtc rtc: t reaches -1, tested 0 2009-02-11 14:25:36 -08:00
s390 [SCSI] Remove SUGGEST flags 2009-03-12 12:58:02 -05:00
sbus
scsi [SCSI] sg: fix races during device removal 2009-03-12 12:58:04 -05:00
serial Merge branch 'sh/for-2.6.29' of git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6 2009-02-27 16:40:00 -08:00
sh
sn
spi spi-gpio: sanitize MISO bitvalue 2009-02-18 15:37:56 -08:00
ssb
staging Staging: w35und: fix usb_control_msg() error handling in wb35_probe() 2009-02-27 12:56:24 -08:00
tc
telephony
thermal
uio
usb [SCSI] Remove SUGGEST flags 2009-03-12 12:58:02 -05:00
uwb
video Merge master.kernel.org:/home/rmk/linux-2.6-arm 2009-03-03 14:12:41 -08:00
virtio virtio-pci: do not oops on config change if driver not loaded 2009-02-02 19:17:56 -08:00
w1 w1: add missing Kconfig/Makefile entries for DS2431 slave driver 2009-02-27 16:26:21 -08:00
watchdog Merge master.kernel.org:/home/rmk/linux-2.6-arm 2009-02-19 09:52:12 -08:00
xen PM: Split up sysdev_[suspend|resume] from device_power_[down|up] 2009-02-22 10:33:44 -08:00
zorro
Kconfig
Makefile