From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
patches@lists.linux.dev, Dan Williams <dan.j.williams@intel.com>,
Vishal Verma <vishal.l.verma@intel.com>,
Sasha Levin <sashal@kernel.org>
Subject: [PATCH 6.1 09/42] ACPI: NFIT: fix a potential deadlock during NFIT teardown
Date: Wed, 1 Mar 2023 19:08:30 +0100 [thread overview]
Message-ID: <20230301180657.451155483@linuxfoundation.org> (raw)
In-Reply-To: <20230301180657.003689969@linuxfoundation.org>
From: Vishal Verma <vishal.l.verma@intel.com>
[ Upstream commit fb6df4366f86dd252bfa3049edffa52d17e7b895 ]
Lockdep reports that acpi_nfit_shutdown() may deadlock against an
opportune acpi_nfit_scrub(). acpi_nfit_scrub () is run from inside a
'work' and therefore has already acquired workqueue-internal locks. It
also acquiires acpi_desc->init_mutex. acpi_nfit_shutdown() first
acquires init_mutex, and was subsequently attempting to cancel any
pending workqueue items. This reversed locking order causes a potential
deadlock:
======================================================
WARNING: possible circular locking dependency detected
6.2.0-rc3 #116 Tainted: G O N
------------------------------------------------------
libndctl/1958 is trying to acquire lock:
ffff888129b461c0 ((work_completion)(&(&acpi_desc->dwork)->work)){+.+.}-{0:0}, at: __flush_work+0x43/0x450
but task is already holding lock:
ffff888129b460e8 (&acpi_desc->init_mutex){+.+.}-{3:3}, at: acpi_nfit_shutdown+0x87/0xd0 [nfit]
which lock already depends on the new lock.
...
Possible unsafe locking scenario:
CPU0 CPU1
---- ----
lock(&acpi_desc->init_mutex);
lock((work_completion)(&(&acpi_desc->dwork)->work));
lock(&acpi_desc->init_mutex);
lock((work_completion)(&(&acpi_desc->dwork)->work));
*** DEADLOCK ***
Since the workqueue manipulation is protected by its own internal locking,
the cancellation of pending work doesn't need to be done under
acpi_desc->init_mutex. Move cancel_delayed_work_sync() outside the
init_mutex to fix the deadlock. Any work that starts after
acpi_nfit_shutdown() drops the lock will see ARS_CANCEL, and the
cancel_delayed_work_sync() will safely flush it out.
Reported-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Vishal Verma <vishal.l.verma@intel.com>
Link: https://lore.kernel.org/r/20230112-acpi_nfit_lockdep-v1-1-660be4dd10be@intel.com
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/acpi/nfit/core.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/acpi/nfit/core.c b/drivers/acpi/nfit/core.c
index ae5f4acf26753..6d4ac934cd499 100644
--- a/drivers/acpi/nfit/core.c
+++ b/drivers/acpi/nfit/core.c
@@ -3297,8 +3297,8 @@ void acpi_nfit_shutdown(void *data)
mutex_lock(&acpi_desc->init_mutex);
set_bit(ARS_CANCEL, &acpi_desc->scrub_flags);
- cancel_delayed_work_sync(&acpi_desc->dwork);
mutex_unlock(&acpi_desc->init_mutex);
+ cancel_delayed_work_sync(&acpi_desc->dwork);
/*
* Bounce the nvdimm bus lock to make sure any in-flight
--
2.39.0
next prev parent reply other threads:[~2023-03-01 18:12 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-01 18:08 [PATCH 6.1 00/42] 6.1.15-rc1 review Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 01/42] Fix XFRM-I support for nested ESP tunnels Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 02/42] arm64: dts: rockchip: reduce thermal limits on rk3399-pinephone-pro Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 03/42] arm64: dts: rockchip: drop unused LED mode property from rk3328-roc-cc Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 04/42] ARM: dts: rockchip: add power-domains property to dp node on rk3288 Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 05/42] arm64: dts: rockchip: add missing #interrupt-cells to rk356x pcie2x1 Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 06/42] arm64: dts: rockchip: fix probe of analog sound card on rock-3a Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 07/42] HID: elecom: add support for TrackBall 056E:011C Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 08/42] HID: Ignore battery for Elan touchscreen on Asus TP420IA Greg Kroah-Hartman
2023-03-01 18:08 ` Greg Kroah-Hartman [this message]
2023-03-01 18:08 ` [PATCH 6.1 10/42] pinctrl: amd: Fix debug output for debounce time Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 11/42] btrfs: send: limit number of clones and allocated memory size Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 12/42] arm64: dts: rockchip: align rk3399 DMC OPP table with bindings Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 13/42] ASoC: rt715-sdca: fix clock stop prepare timeout issue Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 14/42] IB/hfi1: Assign npages earlier Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 15/42] powerpc: Dont select ARCH_WANTS_NO_INSTR Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 16/42] ASoC: SOF: amd: Fix for handling spurious interrupts from DSP Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 17/42] ARM: dts: stihxxx-b2120: fix polarity of reset line of tsin0 port Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 18/42] neigh: make sure used and confirmed times are valid Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 19/42] HID: core: Fix deadloop in hid_apply_multiplier Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 20/42] ASoC: codecs: es8326: Fix DTS properties reading Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 21/42] HID: Ignore battery for ELAN touchscreen 29DF on HP Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 22/42] selftests: ocelot: tc_flower_chains: make test_vlan_ingress_modify() more comprehensive Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 23/42] x86/cpu: Add Lunar Lake M Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 24/42] PM: sleep: Avoid using pr_cont() in the tasks freezing code Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 25/42] bpf: bpf_fib_lookup should not return neigh in NUD_FAILED state Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 26/42] net: Remove WARN_ON_ONCE(sk->sk_forward_alloc) from sk_stream_kill_queues() Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 27/42] vc_screen: dont clobber return value in vcs_read Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 28/42] drm/amd/display: Move DCN314 DOMAIN power control to DMCUB Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 29/42] drm/amd/display: Fix race condition in DPIA AUX transfer Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 30/42] usb: dwc3: pci: add support for the Intel Meteor Lake-M Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 31/42] USB: serial: option: add support for VW/Skoda "Carstick LTE" Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 32/42] usb: gadget: u_serial: Add null pointer check in gserial_resume Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 33/42] arm64: dts: uniphier: Fix property name in PXs3 USB node Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 34/42] usb: typec: pd: Remove usb_suspend_supported sysfs from sink PDO Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 35/42] drm/amd/display: Properly reuse completion structure Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 36/42] attr: add in_group_or_capable() Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 37/42] fs: move should_remove_suid() Greg Kroah-Hartman
2023-03-01 18:08 ` [PATCH 6.1 38/42] attr: add setattr_should_drop_sgid() Greg Kroah-Hartman
2023-03-01 18:09 ` [PATCH 6.1 39/42] attr: use consistent sgid stripping checks Greg Kroah-Hartman
2023-03-01 18:09 ` [PATCH 6.1 40/42] fs: use consistent setgid checks in is_sxid() Greg Kroah-Hartman
2023-03-01 18:09 ` [PATCH 6.1 41/42] scripts/tags.sh: fix incompatibility with PCRE2 Greg Kroah-Hartman
2023-03-01 18:09 ` [PATCH 6.1 42/42] USB: core: Dont hold device lock while reading the "descriptors" sysfs file Greg Kroah-Hartman
2023-03-01 20:33 ` [PATCH 6.1 00/42] 6.1.15-rc1 review Conor Dooley
2023-03-01 22:16 ` Florian Fainelli
2023-03-01 23:43 ` Justin Forbes
2023-03-02 1:44 ` Shuah Khan
2023-03-02 4:27 ` Bagas Sanjaya
2023-03-02 7:27 ` Jon Hunter
2023-03-02 10:19 ` Naresh Kamboju
2023-03-02 10:29 ` Greg Kroah-Hartman
2023-03-02 11:00 ` Naresh Kamboju
2023-03-02 20:02 ` Naresh Kamboju
2023-03-03 7:01 ` Greg Kroah-Hartman
2023-03-03 9:00 ` Naresh Kamboju
2023-03-03 8:04 ` Paolo Abeni
2023-03-03 9:04 ` Naresh Kamboju
2023-03-03 9:23 ` Greg Kroah-Hartman
2023-03-03 9:47 ` Matthieu Baerts
2023-03-03 10:26 ` Greg Kroah-Hartman
2023-03-03 10:56 ` Matthieu Baerts
2023-03-03 11:31 ` Greg Kroah-Hartman
2023-03-03 11:39 ` Paolo Abeni
2023-03-03 11:44 ` Greg Kroah-Hartman
2023-03-03 12:41 ` Paolo Abeni
2023-03-03 13:35 ` Greg Kroah-Hartman
2023-03-02 11:37 ` Sudip Mukherjee (Codethink)
2023-03-02 23:16 ` Slade Watkins
2023-03-02 23:25 ` Rudi Heitbaum
2023-03-03 1:31 ` Guenter Roeck
2023-03-03 2:55 ` Ron Economos
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=20230301180657.451155483@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=dan.j.williams@intel.com \
--cc=patches@lists.linux.dev \
--cc=sashal@kernel.org \
--cc=stable@vger.kernel.org \
--cc=vishal.l.verma@intel.com \
/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.