linux/drivers
NeilBrown a05b7ea03d md: avoid crash when stopping md array races with closing other open fds.
md will refuse to stop an array if any other fd (or mounted fs) is
using it.
When any fs is unmounted of when the last open fd is closed all
pending IO will be flushed (e.g. sync_blockdev call in __blkdev_put)
so there will be no pending IO to worry about when the array is
stopped.

However in order to send the STOP_ARRAY ioctl to stop the array one
must first get and open fd on the block device.
If some fd is being used to write to the block device and it is closed
after mdadm open the block device, but before mdadm issues the
STOP_ARRAY ioctl, then there will be no last-close on the md device so
__blkdev_put will not call sync_blockdev.

If this happens, then IO can still be in-flight while md tears down
the array and bad things can happen (use-after-free and subsequent
havoc).

So in the case where do_md_stop is being called from an open file
descriptor, call sync_block after taking the mutex to ensure there
will be no new openers.

This is needed when setting a read-write device to read-only too.

Cc: stable@vger.kernel.org
Reported-by: majianpeng <majianpeng@gmail.com>
Signed-off-by: NeilBrown <neilb@suse.de>
2012-07-19 15:59:18 +10:00
..
accessibility
acpi Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux 2012-07-14 12:44:26 -07:00
amba
ata Viresh has moved 2012-06-20 14:39:36 -07:00
atm
auxdisplay
base PM / Sleep: Prevent waiting forever on asynchronous suspend after abort 2012-06-24 23:31:09 +02:00
bcma bcma: fix null pointer in bcma_core_pci_irq_ctl 2012-06-08 13:47:07 -04:00
block blk: fix wrong idr_pre_get() error check in loop.c 2012-07-14 15:39:58 -07:00
bluetooth Bluetooth: btmrvl: Do not send vendor events to bluetooth stack 2012-06-19 00:19:11 -03:00
cdrom
char Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 2012-06-18 12:20:36 -07:00
clk clk: fix parent validation in __clk_set_parent() 2012-07-03 12:05:14 -07:00
clocksource clocksource: sh_tmu: Use clockevents_config_and_register(). 2012-06-11 17:10:16 +09:00
connector
cpufreq
cpuidle
crypto
dca
devfreq
dio
dma Merge branch 'fixes' of git://git.infradead.org/users/vkoul/slave-dma 2012-06-20 22:12:52 -07:00
edac edac: Do alignment logic properly in edac_align_ptr() 2012-06-11 12:43:16 -03:00
eisa
extcon extcon: max8997: Add missing kfree for info->edev in max8997_muic_remove() 2012-06-18 16:30:42 -07:00
firewire
firmware
gpio gpio/gpio-tps65910: gpio_chip.of_node referenced without CONFIG_OF_GPIO defined 2012-07-10 22:53:31 +02:00
gpu drm/i915: kick any firmware framebuffers before claiming the gtt 2012-07-03 11:18:48 +01:00
hid Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2012-07-13 10:33:18 -07:00
hsi
hv
hwmon hwmon: (it87) Preserve configuration register bits on init 2012-07-12 22:47:37 +02:00
hwspinlock hwspinlock/core: use global ID to register hwspinlocks on multiple devices 2012-07-07 22:35:30 +03:00
i2c i2c: Add generic I2C multiplexer using pinctrl API 2012-06-04 16:49:43 +02:00
ide drivers/ide/ide-cs.c: adjust suspicious bit operation 2012-06-12 15:51:41 -07:00
idle
ieee802154
iio iio: drop wrong reference from Kconfig 2012-06-14 17:28:46 -07:00
infiniband Merge branches 'cma' and 'ocrdma' into for-linus 2012-06-24 04:59:59 -07:00
input Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2012-07-13 10:33:18 -07:00
iommu iommu/amd: fix type bug in flush code 2012-07-02 12:11:40 +02:00
isdn
leds leds: heartbeat: fix bug on panic 2012-07-04 15:55:19 +08:00
lguest
macintosh
md md: avoid crash when stopping md array races with closing other open fds. 2012-07-19 15:59:18 +10:00
media Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media 2012-07-13 10:29:41 -07:00
memory
memstick
message Merge branch 'akpm' (Andrew's patch-bomb) 2012-05-31 18:10:18 -07:00
mfd mfd: Add missing hunk to change palmas irq to clear on read 2012-07-09 00:16:26 +02:00
misc Merge branch 'akpm' (Andrew's patch-bomb) 2012-07-11 16:06:54 -07:00
mmc mmc: cd-gpio: pass IRQF_ONESHOT to request_threaded_irq() 2012-07-10 23:03:57 -04:00
mtd Late MTD fixes for 3.5: 2012-07-13 09:56:26 -07:00
net e1000e: remove use of IP payload checksum 2012-07-01 00:25:32 -07:00
nfc
nubus
of ARM: SoC fixes for 3.5-rc 2012-07-11 12:44:25 -07:00
oprofile oprofile: perf: use NR_CPUS instead or nr_cpumask_bits for static array 2012-06-21 16:15:11 +02:00
parisc
parport
pci PCI: EHCI: fix crash during suspend on ASUS computers 2012-07-10 09:52:05 -07:00
pcmcia
pinctrl Merge branch 'akpm' (Andrew's patch-bomb) 2012-06-20 14:41:57 -07:00
platform drivers/platform/x86/acerhdf.c: correct Boris' mail address 2012-06-07 14:43:55 -07:00
pnp
power A bunch of fixes for v3.5, nothing extraordinary. 2012-05-31 12:10:15 -07:00
pps
ps3
ptp
rapidio rapidio/tsi721: add DMA engine support 2012-05-31 17:49:31 -07:00
regulator regulator: Fix recursive mutex lockdep warning 2012-07-03 20:25:58 +01:00
remoteproc remoteproc: fix missing CONFIG_FW_LOADER configurations 2012-07-04 11:01:12 +03:00
rpmsg rpmsg: make sure inflight messages don't invoke just-removed callbacks 2012-07-04 11:51:59 +03:00
rtc drivers/rtc/rtc-twl.c: fix threaded IRQ to use IRQF_ONESHOT 2012-07-11 16:04:48 -07:00
s390 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux 2012-05-31 10:51:10 -07:00
sbus
scsi [SCSI] bnx2i: Removed the reference to the netdev->base_addr 2012-07-08 09:52:03 +01:00
sfi
sh
sn
spi SPI: fix over-eager devm_xxx() conversion 2012-06-18 11:27:04 +01:00
ssb
staging Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media 2012-06-25 14:53:09 -07:00
target tcm_fc: Resolve suspicious RCU usage warnings 2012-07-06 12:52:09 -07:00
tc
thermal
tty tty/hvc_opal: Fix debug function name 2012-07-10 19:16:25 +10:00
uio
usb MFD Fixes for 3.5 2012-07-13 09:54:26 -07:00
uwb
vhost vhost: use USER_DS in vhost_worker thread 2012-06-26 21:10:56 -07:00
video fbdev fixes for 3.5 2012-07-11 16:17:14 -07:00
virt
virtio virtio-balloon: fix add/get API use 2012-07-09 09:07:22 +09:30
vlynq
vme
w1
watchdog watchdog: core: fix WDIOC_GETSTATUS return value 2012-06-28 20:40:56 +02:00
xen Five bug-fixes: 2012-06-15 17:17:15 -07:00
zorro
Kconfig
Makefile