linux/drivers
Doug Ledford e5d1dcf1b0 IPoIB: fix mcast_dev_flush/mcast_restart_task race
Our mcast_dev_flush routine and our mcast_restart_task can race
against each other.  In particular, they both hold the priv->lock
while manipulating the rbtree and while removing mcast entries from
the multicast_list and while adding entries to the remove_list, but
they also both drop their locks prior to doing the actual removes.
The mcast_dev_flush routine is run entirely under the rtnl lock and so
has at least some locking.  The actual race condition is like this:

Thread 1                                Thread 2
ifconfig ib0 up
  start multicast join for broadcast
  multicast join completes for broadcast
  start to add more multicast joins
    call mcast_restart_task to add new entries
                                        ifconfig ib0 down
					  mcast_dev_flush
					    mcast_leave(mcast A)
    mcast_leave(mcast A)

As mcast_leave calls ib_sa_multicast_leave, and as member in
core/multicast.c is ref counted, we run into an unbalanced refcount
issue.  To avoid stomping on each others removes, take the rtnl lock
specifically when we are deleting the entries from the remove list.

Signed-off-by: Doug Ledford <dledford@redhat.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
2014-12-15 18:11:14 -08:00
..
accessibility
acpi ACPI and power management updates for 3.19-rc1 2014-12-10 21:17:00 -08:00
amba ACPI and power management updates for 3.19-rc1 2014-12-10 21:17:00 -08:00
ata SCSI for-linus on 20141208 2014-12-08 21:19:19 -08:00
atm Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2014-11-29 20:47:48 -08:00
auxdisplay
base Devicetree changes for v3.19 2014-12-11 13:06:58 -08:00
bcma
block virtio: virtio 1.0 support, misc patches 2014-12-11 12:20:31 -08:00
bluetooth Bluetooth: Add support for Broadcom BCM20702A0 variants firmware download 2014-12-03 19:40:44 +01:00
bus ARM: SoC driver updates for 3.19 2014-12-09 14:48:22 -08:00
cdrom
char virtio: virtio 1.0 support, misc patches 2014-12-11 12:20:31 -08:00
clk ARM: SoC driver updates for 3.19 2014-12-09 14:48:22 -08:00
clocksource Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2014-12-10 08:18:32 -08:00
connector
cpufreq intel_pstate: skip this driver if Sun server has _PPC method 2014-12-03 02:56:04 +01:00
cpuidle
crypto of/reconfig: Always use the same structure for notifiers 2014-11-24 22:25:03 +00:00
dca
devfreq
dio
dma Merge branches 'acpi-scan', 'acpi-pm', 'acpi-lpss' and 'acpi-processor' 2014-12-08 19:52:16 +01:00
dma-buf
edac edac updates for v3.19-rc1 2014-12-11 11:58:50 -08:00
eisa
extcon
firewire
firmware There was a lot of clean ups and minor fixes. One of those clean ups was 2014-12-10 19:58:13 -08:00
fmc
gpio Pin control changes for the v3.19 series: 2014-12-11 10:43:14 -08:00
gpu media updates for v3.19-rc1 2014-12-11 11:49:23 -08:00
hid ACPI and power management updates for 3.19-rc1 2014-12-10 21:17:00 -08:00
hsi hsi / OMAP / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM 2014-12-04 01:07:01 +01:00
hv hyperv: Add support for vNIC hot removal 2014-12-08 20:24:11 -05:00
hwmon hwmon: (tmp401) Detect TMP435 on all addresses it supports 2014-12-08 06:48:37 -08:00
hwspinlock
i2c Devicetree changes for v3.19 2014-12-11 13:06:58 -08:00
ide
idle
iio Hi Linus, 2014-12-08 20:02:54 -08:00
infiniband IPoIB: fix mcast_dev_flush/mcast_restart_task race 2014-12-15 18:11:14 -08:00
input Merge branch 'pm-runtime' 2014-12-08 20:00:44 +01:00
iommu Merge branch 'irq-irqdomain-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2014-12-10 09:01:01 -08:00
ipack
irqchip Merge branch 'irq-irqdomain-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2014-12-10 09:01:01 -08:00
isdn isdn/capi: correct argument types of command_2_index 2014-12-10 15:06:10 -05:00
leds leds: leds-gpio: Fix multiple instances registration without 'label' property 2014-12-04 02:28:19 +01:00
lguest virtio: allow finalize_features to fail 2014-12-09 16:32:32 +02:00
macintosh
mailbox Mailbox: Add support for Platform Communication Channel 2014-11-27 12:51:09 +05:30
mcb
md - Significant DM thin-provisioning performance improvements to meet 2014-12-08 21:10:03 -08:00
media sound updates for 3.19-rc1 2014-12-11 13:20:50 -08:00
memory ARM: SoC/OMAP GPMC driver cleanup and move for 3.19 2014-12-09 16:57:56 -08:00
memstick
message scsi: drop reason argument from ->change_queue_depth 2014-11-24 14:45:27 +01:00
mfd Devicetree changes for v3.19 2014-12-11 13:06:58 -08:00
misc Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2014-12-11 14:27:06 -08:00
mmc ACPI and power management updates for 3.19-rc1 2014-12-10 21:17:00 -08:00
mtd
net Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2014-12-11 14:27:06 -08:00
nfc NFC: st21nfcb: Fix reported error 2014-12-02 22:49:11 +01:00
ntb
nubus
of Devicetree changes for v3.19 2014-12-11 13:06:58 -08:00
oprofile
parisc
parport
pci ACPI and power management updates for 3.19-rc1 2014-12-10 21:17:00 -08:00
pcmcia
phy
pinctrl Pin control changes for the v3.19 series: 2014-12-11 10:43:14 -08:00
platform
pnp
power ARM: SoC platform changes for 3.19 2014-12-09 14:38:28 -08:00
powercap
pps
ps3
ptp
pwm
rapidio
ras
regulator regulator: Updates for v3.19 2014-12-08 20:42:41 -08:00
remoteproc virtio: virtio 1.0 support, misc patches 2014-12-11 12:20:31 -08:00
reset Reset controller changes for v3.19 2014-12-04 16:57:36 +01:00
rpmsg
rtc rtc: refine rtc_timer_do_work() to consider other set alarm failures 2014-12-10 17:41:16 -08:00
s390 Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2014-12-11 14:27:06 -08:00
sbus
scsi Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2014-12-11 14:27:06 -08:00
sfi
sh drivers: sh / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM 2014-12-05 03:08:24 +01:00
sn
soc ARM: SoC driver updates for 3.19 2014-12-09 14:48:22 -08:00
spi Devicetree changes for v3.19 2014-12-11 13:06:58 -08:00
spmi
ssb SSB / B44: fix WOL for BCM4401 2014-12-04 11:32:46 -05:00
staging Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2014-12-11 14:27:06 -08:00
target Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2014-12-11 14:27:06 -08:00
tc
thermal
thunderbolt
tty Merge branch 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2014-12-09 21:21:34 -08:00
uio
usb Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2014-12-11 14:27:06 -08:00
uwb
vfio
vhost Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2014-12-11 14:27:06 -08:00
video fbdev changes for 3.19 2014-12-11 12:46:32 -08:00
virt
virtio virtio_pci: rename virtio_pci -> virtio_pci_common 2014-12-09 21:42:05 +02:00
vlynq
vme
w1
watchdog Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2014-12-10 08:18:32 -08:00
xen arm64 updates for 3.19 2014-12-09 13:12:47 -08:00
zorro
Kconfig ARM: tegra: Move AHB Kconfig to drivers/amba 2014-11-26 09:43:25 +01:00
Makefile