From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
alan@lxorguk.ukuu.org.uk, Patrick McHardy <kaber@trash.net>,
Roland Dreier <roland@purestorage.com>
Subject: [ 52/58] IPoIB: Fix use-after-free of multicast object
Date: Thu, 4 Oct 2012 14:19:59 -0700 [thread overview]
Message-ID: <20121004210642.045352485@linuxfoundation.org> (raw)
In-Reply-To: <20121004210635.449598766@linuxfoundation.org>
3.5-stable review patch. If anyone has any objections, please let me know.
------------------
From: Patrick McHardy <kaber@trash.net>
commit bea1e22df494a729978e7f2c54f7bda328f74bc3 upstream.
Fix a crash in ipoib_mcast_join_task(). (with help from Or Gerlitz)
Commit c8c2afe360b7 ("IPoIB: Use rtnl lock/unlock when changing device
flags") added a call to rtnl_lock() in ipoib_mcast_join_task(), which
is run from the ipoib_workqueue, and hence the workqueue can't be
flushed from the context of ipoib_stop().
In the current code, ipoib_stop() (which doesn't flush the workqueue)
calls ipoib_mcast_dev_flush(), which goes and deletes all the
multicast entries. This takes place without any synchronization with
a possible running instance of ipoib_mcast_join_task() for the same
ipoib device, leading to a crash due to NULL pointer dereference.
Fix this by making sure that the workqueue is flushed before
ipoib_mcast_dev_flush() is called. To make that possible, we move the
RTNL-lock wrapped code to ipoib_mcast_join_finish().
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: Roland Dreier <roland@purestorage.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/infiniband/ulp/ipoib/ipoib_main.c | 2 +-
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 19 ++++++++++---------
2 files changed, 11 insertions(+), 10 deletions(-)
--- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -148,7 +148,7 @@ static int ipoib_stop(struct net_device
netif_stop_queue(dev);
- ipoib_ib_dev_down(dev, 0);
+ ipoib_ib_dev_down(dev, 1);
ipoib_ib_dev_stop(dev, 0);
if (!test_bit(IPOIB_FLAG_SUBINTERFACE, &priv->flags)) {
--- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
@@ -190,7 +190,9 @@ static int ipoib_mcast_join_finish(struc
mcast->mcmember = *mcmember;
- /* Set the cached Q_Key before we attach if it's the broadcast group */
+ /* Set the multicast MTU and cached Q_Key before we attach if it's
+ * the broadcast group.
+ */
if (!memcmp(mcast->mcmember.mgid.raw, priv->dev->broadcast + 4,
sizeof (union ib_gid))) {
spin_lock_irq(&priv->lock);
@@ -198,10 +200,17 @@ static int ipoib_mcast_join_finish(struc
spin_unlock_irq(&priv->lock);
return -EAGAIN;
}
+ priv->mcast_mtu = IPOIB_UD_MTU(ib_mtu_enum_to_int(priv->broadcast->mcmember.mtu));
priv->qkey = be32_to_cpu(priv->broadcast->mcmember.qkey);
spin_unlock_irq(&priv->lock);
priv->tx_wr.wr.ud.remote_qkey = priv->qkey;
set_qkey = 1;
+
+ if (!ipoib_cm_admin_enabled(dev)) {
+ rtnl_lock();
+ dev_set_mtu(dev, min(priv->mcast_mtu, priv->admin_mtu));
+ rtnl_unlock();
+ }
}
if (!test_bit(IPOIB_MCAST_FLAG_SENDONLY, &mcast->flags)) {
@@ -589,14 +598,6 @@ void ipoib_mcast_join_task(struct work_s
return;
}
- priv->mcast_mtu = IPOIB_UD_MTU(ib_mtu_enum_to_int(priv->broadcast->mcmember.mtu));
-
- if (!ipoib_cm_admin_enabled(dev)) {
- rtnl_lock();
- dev_set_mtu(dev, min(priv->mcast_mtu, priv->admin_mtu));
- rtnl_unlock();
- }
-
ipoib_dbg_mcast(priv, "successfully joined all multicast groups\n");
clear_bit(IPOIB_MCAST_RUN, &priv->flags);
next prev parent reply other threads:[~2012-10-04 21:23 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-04 21:19 [ 00/58] 3.5.6-stable review Greg Kroah-Hartman
2012-10-04 21:19 ` [ 01/58] vfs: dcache: fix deadlock in tree traversal Greg Kroah-Hartman
2012-10-04 21:19 ` [ 02/58] dm mpath: only retry ioctl when no paths if queue_if_no_path set Greg Kroah-Hartman
2012-10-04 21:19 ` [ 03/58] dm: handle requests beyond end of device instead of using BUG_ON Greg Kroah-Hartman
2012-10-04 21:19 ` [ 04/58] dm table: clear add_random unless all devices have it set Greg Kroah-Hartman
2012-10-04 21:19 ` [ 05/58] dm verity: fix overflow check Greg Kroah-Hartman
2012-10-04 21:19 ` [ 06/58] usb: gadget: make g_printer enumerate again Greg Kroah-Hartman
2012-10-04 21:19 ` [ 07/58] usb: gadget: initialize the strings in tcm_usb_gadget properly Greg Kroah-Hartman
2012-10-04 21:19 ` [ 08/58] USB: option: blacklist QMI interface on ZTE MF683 Greg Kroah-Hartman
2012-10-04 21:19 ` [ 09/58] USB: ftdi_sio: add TIAO USB Multi-Protocol Adapter (TUMPA) support Greg Kroah-Hartman
2012-10-04 21:19 ` [ 10/58] USB: qcaux: add Pantech vendor class match Greg Kroah-Hartman
2012-10-04 21:19 ` [ 11/58] usb: host: xhci: Fix Null pointer dereferencing with 71c731a for non-x86 systems Greg Kroah-Hartman
2012-10-04 21:19 ` [ 12/58] USB: serial: fix up bug with missing {} Greg Kroah-Hartman
2012-10-04 21:19 ` [ 13/58] staging: speakup_soft: Fix reading of init string Greg Kroah-Hartman
2012-10-04 21:19 ` [ 14/58] tty: keyboard.c: Remove locking from vt_get_leds Greg Kroah-Hartman
2012-10-04 21:19 ` [ 15/58] staging: r8712u: Do not queue cloned skb Greg Kroah-Hartman
2012-10-04 21:19 ` [ 16/58] staging: comedi: s626: dont dereference insn->data Greg Kroah-Hartman
2012-10-04 21:19 ` [ 17/58] staging: comedi: jr3_pci: fix iomem dereference Greg Kroah-Hartman
2012-10-04 21:19 ` [ 18/58] staging: comedi: dont dereference user memory for INSN_INTTRIG Greg Kroah-Hartman
2012-10-04 21:19 ` [ 19/58] staging: comedi: fix memory leak for saved channel list Greg Kroah-Hartman
2012-10-04 21:19 ` [ 20/58] Remove BUG_ON from n_tty_read() Greg Kroah-Hartman
2012-10-04 21:19 ` [ 21/58] TTY: ttyprintk, dont touch behind tty->write_buf Greg Kroah-Hartman
2012-10-04 21:19 ` [ 22/58] serial: omap: fix software flow control Greg Kroah-Hartman
2012-10-04 21:19 ` [ 23/58] serial: pl011: handle corruption at high clock speeds Greg Kroah-Hartman
2012-10-04 21:19 ` [ 24/58] serial: set correct baud_base for EXSYS EX-41092 Dual 16950 Greg Kroah-Hartman
2012-10-04 21:19 ` [ 25/58] tools/hv: Fix file handle leak Greg Kroah-Hartman
2012-10-04 21:19 ` [ 26/58] tools/hv: Fix exit() error code Greg Kroah-Hartman
2012-10-04 21:19 ` [ 27/58] tools/hv: Check for read/write errors Greg Kroah-Hartman
2012-10-04 21:19 ` [ 28/58] b43legacy: Fix crash on unload when firmware not available Greg Kroah-Hartman
2012-10-04 21:19 ` [ 29/58] firmware: Add missing attributes to EFI variable attribute print out from sysfs Greg Kroah-Hartman
2012-10-04 21:19 ` [ 30/58] xhci: Intel Panther Point BEI quirk Greg Kroah-Hartman
2012-10-04 21:19 ` [ 31/58] xHCI: add cmd_ring_state Greg Kroah-Hartman
2012-10-04 21:19 ` [ 32/58] xHCI: add aborting command ring function Greg Kroah-Hartman
2012-10-04 21:19 ` [ 33/58] xHCI: cancel command after command timeout Greg Kroah-Hartman
2012-10-04 21:19 ` [ 34/58] xHCI: handle command after aborting the command ring Greg Kroah-Hartman
2012-10-04 21:19 ` [ 35/58] Increase XHCI suspend timeout to 16ms Greg Kroah-Hartman
2012-10-04 21:19 ` [ 36/58] HID: keep dev_rdesc unmodified and use it for comparisons Greg Kroah-Hartman
2012-10-04 21:19 ` [ 37/58] ath9k: Disable ASPM only for AR9285 Greg Kroah-Hartman
2012-10-04 21:19 ` [ 38/58] xen/pciback: Restore the PCI config space after an FLR Greg Kroah-Hartman
2012-10-04 21:19 ` [ 39/58] coredump: prevent double-free on an error path in core dumper Greg Kroah-Hartman
2012-10-04 21:19 ` [ 40/58] n_gsm.c: Implement 3GPP27.010 DLC start-up procedure in MUX Greg Kroah-Hartman
2012-10-04 21:19 ` [ 41/58] n_gsm: uplink SKBs accumulate on list Greg Kroah-Hartman
2012-10-04 21:19 ` [ 42/58] n_gsm: added interlocking for gsm_data_lock for certain code paths Greg Kroah-Hartman
2012-10-04 21:19 ` [ 43/58] n_gsm: memory leak in uplink error path Greg Kroah-Hartman
2012-10-04 21:19 ` [ 44/58] UBI: fix autoresize handling in R/O mode Greg Kroah-Hartman
2012-10-04 21:19 ` [ 45/58] UBI: erase free PEB with bitflip in EC header Greg Kroah-Hartman
2012-10-04 21:19 ` [ 46/58] Yama: handle 32-bit userspace prctl Greg Kroah-Hartman
2012-10-04 21:19 ` [ 47/58] SCSI: ibmvscsi: Fix host config length field overflow Greg Kroah-Hartman
2012-10-04 21:19 ` [ 48/58] SCSI: hpsa: Use LUN reset instead of target reset Greg Kroah-Hartman
2012-10-04 21:19 ` [ 49/58] can: mscan-mpc5xxx: fix return value check in mpc512x_can_get_clock() Greg Kroah-Hartman
2012-10-04 21:19 ` [ 50/58] remoteproc: select VIRTIO to avoid build breakage Greg Kroah-Hartman
2012-10-04 21:19 ` [ 51/58] remoteproc: fix a potential NULL-dereference on cleanup Greg Kroah-Hartman
2012-10-04 21:19 ` Greg Kroah-Hartman [this message]
2012-10-04 21:20 ` [ 53/58] IB/srp: Fix use-after-free in srp_reset_req() Greg Kroah-Hartman
2012-10-04 21:20 ` [ 54/58] IB/srp: Avoid having aborted requests hang Greg Kroah-Hartman
2012-10-04 21:20 ` [ 55/58] isci: fix isci_pci_probe() generates warning on efi failure path Greg Kroah-Hartman
2012-10-04 21:20 ` [ 56/58] x86/alternatives: Fix p6 nops on non-modular kernels Greg Kroah-Hartman
2012-10-04 21:20 ` [ 57/58] SCSI: scsi_remove_target: fix softlockup regression on hot remove Greg Kroah-Hartman
2012-10-04 21:20 ` [ 58/58] SCSI: scsi_dh_alua: Enable STPG for unavailable ports Greg Kroah-Hartman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20121004210642.045352485@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=kaber@trash.net \
--cc=linux-kernel@vger.kernel.org \
--cc=roland@purestorage.com \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).