All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org,
	"Bryant G. Ly" <bryantly@linux.vnet.ibm.com>,
	Nicholas Bellinger <nab@linux-iscsi.org>,
	Christoph Hellwig <hch@lst.de>
Subject: [PATCH 4.11 02/78] configfs: Fix race between create_link and configfs_rmdir
Date: Mon, 19 Jun 2017 23:15:02 +0800	[thread overview]
Message-ID: <20170619151029.498718653@linuxfoundation.org> (raw)
In-Reply-To: <20170619151029.408399976@linuxfoundation.org>

4.11-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Nicholas Bellinger <nab@linux-iscsi.org>

commit ba80aa909c99802c428682c352b0ee0baac0acd3 upstream.

This patch closes a long standing race in configfs between
the creation of a new symlink in create_link(), while the
symlink target's config_item is being concurrently removed
via configfs_rmdir().

This can happen because the symlink target's reference
is obtained by config_item_get() in create_link() before
the CONFIGFS_USET_DROPPING bit set by configfs_detach_prep()
during configfs_rmdir() shutdown is actually checked..

This originally manifested itself on ppc64 on v4.8.y under
heavy load using ibmvscsi target ports with Novalink API:

[ 7877.289863] rpadlpar_io: slot U8247.22L.212A91A-V1-C8 added
[ 7879.893760] ------------[ cut here ]------------
[ 7879.893768] WARNING: CPU: 15 PID: 17585 at ./include/linux/kref.h:46 config_item_get+0x7c/0x90 [configfs]
[ 7879.893811] CPU: 15 PID: 17585 Comm: targetcli Tainted: G           O 4.8.17-customv2.22 #12
[ 7879.893812] task: c00000018a0d3400 task.stack: c0000001f3b40000
[ 7879.893813] NIP: d000000002c664ec LR: d000000002c60980 CTR: c000000000b70870
[ 7879.893814] REGS: c0000001f3b43810 TRAP: 0700   Tainted: G O     (4.8.17-customv2.22)
[ 7879.893815] MSR: 8000000000029033 <SF,EE,ME,IR,DR,RI,LE>  CR: 28222242  XER: 00000000
[ 7879.893820] CFAR: d000000002c664bc SOFTE: 1
                GPR00: d000000002c60980 c0000001f3b43a90 d000000002c70908 c0000000fbc06820
                GPR04: c0000001ef1bd900 0000000000000004 0000000000000001 0000000000000000
                GPR08: 0000000000000000 0000000000000001 d000000002c69560 d000000002c66d80
                GPR12: c000000000b70870 c00000000e798700 c0000001f3b43ca0 c0000001d4949d40
                GPR16: c00000014637e1c0 0000000000000000 0000000000000000 c0000000f2392940
                GPR20: c0000001f3b43b98 0000000000000041 0000000000600000 0000000000000000
                GPR24: fffffffffffff000 0000000000000000 d000000002c60be0 c0000001f1dac490
                GPR28: 0000000000000004 0000000000000000 c0000001ef1bd900 c0000000f2392940
[ 7879.893839] NIP [d000000002c664ec] config_item_get+0x7c/0x90 [configfs]
[ 7879.893841] LR [d000000002c60980] check_perm+0x80/0x2e0 [configfs]
[ 7879.893842] Call Trace:
[ 7879.893844] [c0000001f3b43ac0] [d000000002c60980] check_perm+0x80/0x2e0 [configfs]
[ 7879.893847] [c0000001f3b43b10] [c000000000329770] do_dentry_open+0x2c0/0x460
[ 7879.893849] [c0000001f3b43b70] [c000000000344480] path_openat+0x210/0x1490
[ 7879.893851] [c0000001f3b43c80] [c00000000034708c] do_filp_open+0xfc/0x170
[ 7879.893853] [c0000001f3b43db0] [c00000000032b5bc] do_sys_open+0x1cc/0x390
[ 7879.893856] [c0000001f3b43e30] [c000000000009584] system_call+0x38/0xec
[ 7879.893856] Instruction dump:
[ 7879.893858] 409d0014 38210030 e8010010 7c0803a6 4e800020 3d220000 e94981e0 892a0000
[ 7879.893861] 2f890000 409effe0 39200001 992a0000 <0fe00000> 4bffffd0 60000000 60000000
[ 7879.893866] ---[ end trace 14078f0b3b5ad0aa ]---

To close this race, go ahead and obtain the symlink's target
config_item reference only after the existing CONFIGFS_USET_DROPPING
check succeeds.

This way, if configfs_rmdir() wins create_link() will return -ENONET,
and if create_link() wins configfs_rmdir() will return -EBUSY.

Reported-by: Bryant G. Ly <bryantly@linux.vnet.ibm.com>
Tested-by: Bryant G. Ly <bryantly@linux.vnet.ibm.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 fs/configfs/symlink.c |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

--- a/fs/configfs/symlink.c
+++ b/fs/configfs/symlink.c
@@ -83,14 +83,13 @@ static int create_link(struct config_ite
 	ret = -ENOMEM;
 	sl = kmalloc(sizeof(struct configfs_symlink), GFP_KERNEL);
 	if (sl) {
-		sl->sl_target = config_item_get(item);
 		spin_lock(&configfs_dirent_lock);
 		if (target_sd->s_type & CONFIGFS_USET_DROPPING) {
 			spin_unlock(&configfs_dirent_lock);
-			config_item_put(item);
 			kfree(sl);
 			return -ENOENT;
 		}
+		sl->sl_target = config_item_get(item);
 		list_add(&sl->sl_list, &target_sd->s_links);
 		spin_unlock(&configfs_dirent_lock);
 		ret = configfs_create_link(sl, parent_item->ci_dentry,

  parent reply	other threads:[~2017-06-19 15:17 UTC|newest]

Thread overview: 78+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-19 15:15 [PATCH 4.11 00/78] 4.11.7-stable review Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 01/78] fs: pass on flags in compat_writev Greg Kroah-Hartman
2017-06-19 15:15 ` Greg Kroah-Hartman [this message]
2017-06-19 15:15 ` [PATCH 4.11 03/78] can: gs_usb: fix memory leak in gs_cmd_reset() Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 04/78] ila_xlat: add missing hash secret initialization Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 06/78] [media] vb2: Fix an off by one error in vb2_plane_vaddr Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 07/78] [media] cec: race fix: dont return -ENONET in cec_receive() Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 08/78] selinux: fix double free in selinux_parse_opts_str() Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 09/78] mac80211: dont look at the PM bit of BAR frames Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 10/78] mac80211/wpa: use constant time memory comparison for MACs Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 11/78] drm: mxsfb_crtc: Reset the eLCDIF controller Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 12/78] drm/amdgpu: Fix overflow of watermark calcs at > 4k resolutions Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 13/78] drm/i915: Fix GVT-g PVINFO version compatibility check Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 15/78] drm/i915: Do not sync RCU during shrinking Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 16/78] mac80211: fix IBSS presp allocation size Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 17/78] mac80211: strictly check mesh address extension mode Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 18/78] mac80211: fix dropped counter in multiqueue RX Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 19/78] mac80211: dont send SMPS action frame in AP mode when not needed Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 20/78] drm/mediatek: fix mtk_hdmi_setup_vendor_specific_infoframe mistake Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 21/78] drm/vc4: Fix OOPSes from trying to cache a partially constructed BO Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 23/78] serial: 8250_lpss: Unconditionally set PCI master for Quark Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 24/78] serial: sh-sci: Fix (AUTO)RTS in sci_init_pins() Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 25/78] serial: sh-sci: Fix late enablement of AUTORTS Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 26/78] x86/mm/32: Set the __vmalloc_start_set flag in initmem_init() Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 27/78] mfd: omap-usb-tll: Fix inverted bit use for USB TLL mode Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 28/78] mfd: axp20x: Add support for dts property "xpowers,master-mode" Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 29/78] dt-bindings: mfd: axp20x: Add "xpowers,master-mode" property for AXP806 PMICs Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 30/78] mfd: cpcap: Fix interrupt to use level interrupt Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 31/78] mfd: cpcap: Use ack_invert interrupts Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 32/78] mfd: cpcap: Fix bad use of IRQ sense register Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 33/78] phy: rcar-gen3-usb2: fix implementation for runtime PM Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 34/78] mtd: physmap_of: really fix the physmap add-ons Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 35/78] powerpc/mm: Add physical address to Linux page table dump Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 36/78] staging: rtl8188eu: prevent an underflow in rtw_check_beacon_data() Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 37/78] staging: bcm2835-camera: fix error handling in init Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 38/78] staging: iio: tsl2x7x_core: Fix standard deviation calculation Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 39/78] iio: imu: st_lsm6dsx: do not apply ODR configuration in write_raw handler Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 40/78] iio: proximity: as3935: recalibrate RCO after resume Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 41/78] iio: adc: ti_am335x_adc: allocating too much in probe Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 42/78] ALSA: hda: Add Geminilake id to SKL_PLUS Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 43/78] ALSA: usb-audio: fix Amanero Combo384 quirk on big-endian hosts Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 44/78] usb: gadget: udc: renesas_usb3: fix pm_runtime functions calling Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 45/78] usb: gadget: udc: renesas_usb3: fix deadlock by spinlock Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 46/78] usb: gadget: udc: renesas_usb3: lock for PN_ registers access Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 47/78] USB: hub: fix SS max number of ports Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 48/78] usb: core: fix potential memory leak in error path during hcd creation Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 49/78] USB: usbip: fix nonconforming hub descriptor Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 50/78] usb: dwc3: gadget: Fix ISO transfer performance Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 51/78] [media] pvrusb2: reduce stack usage pvr2_eeprom_analyze() Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 52/78] USB: gadget: dummy_hcd: fix hub-descriptor removable fields Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 53/78] usb: r8a66597-hcd: select a different endpoint on timeout Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 54/78] usb: r8a66597-hcd: decrease timeout Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 55/78] [media] coda: restore original firmware locations Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 56/78] drivers/misc/c2port/c2port-duramar2150.c: checking for NULL instead of IS_ERR() Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 57/78] usb: xhci: Fix USB 3.1 supported protocol parsing Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 58/78] usb: xhci: ASMedia ASM1042A chipset need shorts TX quirk Greg Kroah-Hartman
2017-06-19 15:15 ` [PATCH 4.11 59/78] USB: gadget: fix GPF in gadgetfs Greg Kroah-Hartman
2017-06-19 15:16 ` [PATCH 4.11 60/78] USB: gadgetfs, dummy-hcd, net2280: fix locking for callbacks Greg Kroah-Hartman
2017-06-19 15:16 ` [PATCH 4.11 61/78] mm/memory-failure.c: use compound_head() flags for huge pages Greg Kroah-Hartman
2017-06-19 15:16 ` [PATCH 4.11 62/78] swap: cond_resched in swap_cgroup_prepare() Greg Kroah-Hartman
2017-06-19 15:16 ` [PATCH 4.11 63/78] mm: numa: avoid waiting on freed migrated pages Greg Kroah-Hartman
2017-06-19 15:16 ` [PATCH 4.11 64/78] userfaultfd: shmem: handle coredumping in handle_userfault() Greg Kroah-Hartman
2017-06-19 15:16 ` [PATCH 4.11 65/78] iio: imu: inv_mpu6050: add accel lpf setting for chip >= MPU6500 Greg Kroah-Hartman
2017-06-19 15:16 ` [PATCH 4.11 66/78] staging: iio: ad7152: Fix deadlock in ad7152_write_raw_samp_freq() Greg Kroah-Hartman
2017-06-19 15:16 ` [PATCH 4.11 67/78] iio: adc: meson-saradc: fix potential crash in meson_sar_adc_clear_fifo Greg Kroah-Hartman
2017-06-19 15:16 ` [PATCH 4.11 68/78] sched/core: Idle_task_exit() shouldnt use switch_mm_irqs_off() Greg Kroah-Hartman
2017-06-19 15:16 ` [PATCH 4.11 69/78] genirq: Release resources in __setup_irq() error path Greg Kroah-Hartman
2017-06-19 15:16 ` [PATCH 4.11 70/78] alarmtimer: Prevent overflow of relative timers Greg Kroah-Hartman
2017-06-19 15:16 ` [PATCH 4.11 71/78] alarmtimer: Rate limit periodic intervals Greg Kroah-Hartman
2017-06-19 15:16 ` [PATCH 4.11 72/78] virtio_balloon: disable VIOMMU support Greg Kroah-Hartman
2017-06-19 15:16 ` [PATCH 4.11 73/78] MIPS: Fix bnezc/jialc return address calculation Greg Kroah-Hartman
2017-06-19 15:16 ` [PATCH 4.11 74/78] MIPS: .its targets depend on vmlinux Greg Kroah-Hartman
2017-06-19 15:16 ` [PATCH 4.11 75/78] crypto: Work around deallocated stack frame reference gcc bug on sparc Greg Kroah-Hartman
2017-06-19 15:16 ` [PATCH 4.11 76/78] ARM: dts: am335x-sl50: Fix card detect pin for mmc1 Greg Kroah-Hartman
2017-06-19 15:16 ` [PATCH 4.11 77/78] ARM: dts: am335x-sl50: Fix cannot claim requested pins for spi0 Greg Kroah-Hartman
2017-06-19 15:16 ` [PATCH 4.11 78/78] mm: larger stack guard gap, between vmas Greg Kroah-Hartman
2017-06-19 22:48 ` [PATCH 4.11 00/78] 4.11.7-stable review Guenter Roeck
2017-06-20  0:54   ` 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=20170619151029.498718653@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=bryantly@linux.vnet.ibm.com \
    --cc=hch@lst.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nab@linux-iscsi.org \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.