All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sasha Levin <Alexander.Levin@microsoft.com>
To: "stable@vger.kernel.org" <stable@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Cc: Pingfan Liu <kernelfans@gmail.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Sasha Levin <Alexander.Levin@microsoft.com>
Subject: [PATCH AUTOSEL 4.9 41/43] drivers/base: stop new probing during shutdown
Date: Fri, 7 Sep 2018 00:38:47 +0000	[thread overview]
Message-ID: <20180907003816.57852-41-alexander.levin@microsoft.com> (raw)
In-Reply-To: <20180907003816.57852-1-alexander.levin@microsoft.com>

From: Pingfan Liu <kernelfans@gmail.com>

[ Upstream commit 3297c8fc65af5d40501ea7cddff1b195cae57e4e ]

There is a race window in device_shutdown(), which may cause
-1. parent device shut down before child or
-2. no shutdown on a new probing device.

For 1st, taking the following scenario:
         device_shutdown                        new plugin device
  list_del_init(parent_dev);
  spin_unlock(list_lock);
                                                  device_add(child)
                                                  probe child
  shutdown parent_dev
       --> now child is on the tail of devices_kset

For 2nd, taking the following scenario:
         device_shutdown                        new plugin device
                                                  device_add(dev)
  device_lock(dev);
  ...
  device_unlock(dev);
                                                  probe dev
       --> now, the new occurred dev has no opportunity to shutdown

To fix this race issue, just prevent the new probing request. With this
logic, device_shutdown() is more similar to dpm_prepare().

Signed-off-by: Pingfan Liu <kernelfans@gmail.com>
Reviewed-by: Rafael J. Wysocki <rafael@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 drivers/base/core.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/base/core.c b/drivers/base/core.c
index a0ed957d738f..f43caad30e1e 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -2072,6 +2072,9 @@ void device_shutdown(void)
 {
 	struct device *dev, *parent;
 
+	wait_for_device_probe();
+	device_block_probing();
+
 	spin_lock(&devices_kset->list_lock);
 	/*
 	 * Walk the devices list backward, shutting down each in turn.
-- 
2.17.1

  parent reply	other threads:[~2018-09-07  0:47 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-07  0:38 [PATCH AUTOSEL 4.9 01/43] usb: usbtest: use irqsave() in USB's complete callback Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 02/43] iommu/arm-smmu-v3: sync the OVACKFLG to PRIQ consumer register Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 04/43] ALSA: usb-audio: Fix multiple definitions in AU0828_DEVICE() macro Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 03/43] ALSA: msnd: Fix the default sample sizes Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 05/43] xfrm: fix 'passing zero to ERR_PTR()' warning Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 06/43] gfs2: Special-case rindex for gfs2_grow Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 07/43] clk: imx6ul: fix missing of_node_put() Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 09/43] kbuild: add .DELETE_ON_ERROR special target Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 08/43] clk: clk-fixed-factor: Clear OF_POPULATED flag in case of failure Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 10/43] media: tw686x: Fix oops on buffer alloc failure Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 11/43] dmaengine: pl330: fix irq race with terminate_all Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 12/43] MIPS: ath79: fix system restart Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 13/43] media: videobuf2-core: check for q->error in vb2_core_qbuf() Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 14/43] IB/rxe: Drop QP0 silently Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 15/43] mtd/maps: fix solutionengine.c printk format warnings Sasha Levin
2018-09-07  0:38   ` Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 16/43] perf test: Fix subtest number when showing results Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 17/43] gfs2: Don't reject a supposedly full bitmap if we have blocks reserved Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 18/43] iio: ad9523: Fix displayed phase Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 19/43] fbdev: omapfb: off by one in omapfb_register_client() Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 21/43] fbdev/via: fix defined but not used warning Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 20/43] video: goldfishfb: fix memory leak on driver remove Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 22/43] perf powerpc: Fix callchain ip filtering when return address is in a register Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 24/43] fbdev: Distinguish between interlaced and progressive modes Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 23/43] video: fbdev: pxafb: clear allocated memory for video modes Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 25/43] ARM: exynos: Clear global variable on init error path Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 26/43] perf powerpc: Fix callchain ip filtering Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 28/43] MIPS: jz4740: Bump zload address Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 27/43] powerpc/powernv: opal_put_chars partial write fix Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 29/43] mac80211: restrict delayed tailroom needed decrement Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 30/43] Smack: Fix handling of IPv4 traffic received by PF_INET6 sockets Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 31/43] wan/fsl_ucc_hdlc: use IS_ERR_VALUE() to check return value of qe_muram_alloc Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 32/43] efi/arm: preserve early mapping of UEFI memory map longer for BGRT Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 33/43] nfp: avoid buffer leak when FW communication fails Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 34/43] xen-netfront: fix queue name setting Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 35/43] arm64: dts: qcom: db410c: Fix Bluetooth LED trigger Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 36/43] ARM: dts: qcom: msm8974-hammerhead: increase load on l20 for sdhci Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 37/43] s390/qeth: fix race in used-buffer accounting Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 39/43] platform/x86: toshiba_acpi: Fix defined but not used build warnings Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 38/43] s390/qeth: reset layer2 attribute on layer switch Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 40/43] KVM: arm/arm64: Fix vgic init race Sasha Levin
2018-09-07  0:38 ` Sasha Levin [this message]
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 42/43] dmaengine: mv_xor_v2: kill the tasklets upon exit Sasha Levin
2018-09-07  0:38 ` [PATCH AUTOSEL 4.9 43/43] crypto: sharah - Unregister correct algorithms for SAHARA 3 Sasha Levin
2018-09-07  5:43 ` [PATCH AUTOSEL 4.9 01/43] usb: usbtest: use irqsave() in USB's complete callback 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=20180907003816.57852-41-alexander.levin@microsoft.com \
    --to=alexander.levin@microsoft.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=kernelfans@gmail.com \
    --cc=linux-kernel@vger.kernel.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.