From: Greg Kroah-Hartman Date: Fri, 9 Oct 2020 09:40:09 +0000 (+0200) Subject: 4.14-stable patches X-Git-Tag: v4.4.239~60 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e1a9afcfb60c7739af453959fa9c96d45bc0dfaf;p=thirdparty%2Fkernel%2Fstable-queue.git 4.14-stable patches added patches: driver-core-fix-probe_count-imbalance-in-really_probe.patch --- diff --git a/queue-4.14/driver-core-fix-probe_count-imbalance-in-really_probe.patch b/queue-4.14/driver-core-fix-probe_count-imbalance-in-really_probe.patch new file mode 100644 index 00000000000..399bee456b2 --- /dev/null +++ b/queue-4.14/driver-core-fix-probe_count-imbalance-in-really_probe.patch @@ -0,0 +1,55 @@ +From b292b50b0efcc7095d8bf15505fba6909bb35dce Mon Sep 17 00:00:00 2001 +From: Tetsuo Handa +Date: Mon, 13 Jul 2020 11:12:54 +0900 +Subject: driver core: Fix probe_count imbalance in really_probe() + +From: Tetsuo Handa + +commit b292b50b0efcc7095d8bf15505fba6909bb35dce upstream. + +syzbot is reporting hung task in wait_for_device_probe() [1]. At least, +we always need to decrement probe_count if we incremented probe_count in +really_probe(). + +However, since I can't find "Resources present before probing" message in +the console log, both "this message simply flowed off" and "syzbot is not +hitting this path" will be possible. Therefore, while we are at it, let's +also prepare for concurrent wait_for_device_probe() calls by replacing +wake_up() with wake_up_all(). + +[1] https://syzkaller.appspot.com/bug?id=25c833f1983c9c1d512f4ff860dd0d7f5a2e2c0f + +Reported-by: syzbot +Fixes: 7c35e699c88bd607 ("driver core: Print device when resources present in really_probe()") +Cc: Geert Uytterhoeven +Signed-off-by: Tetsuo Handa +Cc: stable +Link: https://lore.kernel.org/r/20200713021254.3444-1-penguin-kernel@I-love.SAKURA.ne.jp +[iwamatsu: Drop patch for deferred_probe_timeout_work_func()] +Signed-off-by: Nobuhiro Iwamatsu (CIP) +Signed-off-by: Greg Kroah-Hartman +--- + drivers/base/dd.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +--- a/drivers/base/dd.c ++++ b/drivers/base/dd.c +@@ -377,7 +377,8 @@ static int really_probe(struct device *d + drv->bus->name, __func__, drv->name, dev_name(dev)); + if (!list_empty(&dev->devres_head)) { + dev_crit(dev, "Resources present before probing\n"); +- return -EBUSY; ++ ret = -EBUSY; ++ goto done; + } + + re_probe: +@@ -486,7 +487,7 @@ pinctrl_bind_failed: + ret = 0; + done: + atomic_dec(&probe_count); +- wake_up(&probe_waitqueue); ++ wake_up_all(&probe_waitqueue); + return ret; + } + diff --git a/queue-4.14/series b/queue-4.14/series index d4eca48ee94..3c50b3e4075 100644 --- a/queue-4.14/series +++ b/queue-4.14/series @@ -37,3 +37,4 @@ net-wireless-nl80211-fix-out-of-bounds-access-in-nl80211_del_key.patch usermodehelper-reset-umask-to-default-before-executing-user-process.patch platform-x86-thinkpad_acpi-initialize-tp_nvram_state-variable.patch platform-x86-thinkpad_acpi-re-initialize-acpi-buffer-size-when-reuse.patch +driver-core-fix-probe_count-imbalance-in-really_probe.patch