powerpc/eeh: Fix recursive locking on devices without EEH sensitive driver
- Published
- Last modified
- Where the record stands: published, rejected by its publisher, or superseded by another id.What do these mean? →
- published
- Whether CISA lists it in its Known Exploited Vulnerabilities catalog: proof that attackers are using it.What do these mean? →
- Not listed in CISA KEV
- Fix
- Fixed in 5.10.271, 5.15.222, 6.1.189, 6.6.158, 6.12.111, and 4 more
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- None on Exploit-DB, Metasploit or GitHub
Summary
In the Linux kernel, the following vulnerability has been resolved: powerpc/eeh: Fix recursive locking on devices without EEH sensitive driver The commit 1010b4c012b0 ("powerpc/eeh: Make EEH driver device hotplug safe") refactored the EEH code such that the pci_rescan_remove_lock is held at the beginning of eeh_handle_normal_event() and the eeh_reset_device() is called with that lock being held. Looks like the commit missed to remove the existing lock/unlock inside eeh_rmv_device() which is no longer necessary. This is causing the eehd to hang on the lock which it actually holds when that code path is taken. [<0>] 0xc00000011c78f870 [<0>] __switch_to+0xfc/0x1a0 [<0>] pci_lock_rescan_remove+0x30/0x44 [<0>] eeh_rmv_device+0x290/0x2e0 [<0>] eeh_pe_dev_traverse+0x80/0x130 [<0>] eeh_reset_device+0xcc/0x23c [<0>] eeh_handle_normal_event+0x830/0xa80 [<0>] eeh_event_handler+0xf8/0x190 [<0>] kthread+0x194/0x1b0 [<0>] start_kernel_thread+0x14/0x18 The issue is seen for cases where the errors are detected on the PHB directly AND|OR for devices where the driver error_detected() returns PCI_ERS_RESULT_NEED_RESET, and driver being not EEH sensitive(i.e no error handlers like slot_reset(), resume() etc defined).
Timeline
- CVE published
- Record last updated
Affected versions
- Linux Linux
From 502f08831a9afb72dc98a56ae6504da43e93b250 · fixed in 3833dfae0680b6b16e2469fbc90aa48376311cd8; From f56e004b781719d8fdf6c9619b15caf2579bc1f2 · fixed in 24524fca27da674668941440e8e05cdfec0b0222; From 59c6d3d81d42bf543c90597b4f38c53d6874c5a1 · fixed in a58531181363219fa5de2b53d5d7274dcdfca98b; From a426e8a6ae161f51888585b065db0f8f93ab2e16 · fixed in 460fab22b65138531082910702f74b048b25237b; From d2c60a8a387e9fcc28447ef36c03f8e49fd052a6 · fixed in 102e3dc5ab5ba052e294819e83384166b242c1ec; From 1010b4c012b0d78dfb9d3132b49aa2ef024a07a7 · fixed in 2920af33d097ca335e492b346af70b72986ad6dc; From 1010b4c012b0d78dfb9d3132b49aa2ef024a07a7 · fixed in 85d8eaefc052cf3e5ae2c7bafeda2db68b8898b4; From 1010b4c012b0d78dfb9d3132b49aa2ef024a07a7 · fixed in c5e68706527968282e49de205cc2b935823cb88a; From 5.10.241 · fixed in 5.10.271; From 5.15.190 · fixed in 5.15.222; From 6.1.148 · fixed in 6.1.189; From 6.6.102 · fixed in 6.6.158; From 6.12.42 · fixed in 6.12.111; From 6.15.10 · fixed in 6.16; From 6.16.1 · fixed in 6.17
- Linux Linux
6.17
- KernelLinux
fixed in 5.10.271; From 5.11.0 · fixed in 5.15.222; From 5.16.0 · fixed in 6.1.189; From 6.2.0 · fixed in 6.6.158; From 6.7.0 · fixed in 6.12.111; From 6.13.0 · fixed in 6.18.53; From 6.17.0 · fixed in 7.2.7
References 8
git.kernel.org
- stable/c/3833dfae0680b6b16e2469fbc90aa48376311cd8
- stable/c/24524fca27da674668941440e8e05cdfec0b0222
- stable/c/a58531181363219fa5de2b53d5d7274dcdfca98b
- stable/c/460fab22b65138531082910702f74b048b25237b
- stable/c/102e3dc5ab5ba052e294819e83384166b242c1ec
- stable/c/2920af33d097ca335e492b346af70b72986ad6dc
- stable/c/85d8eaefc052cf3e5ae2c7bafeda2db68b8898b4
- stable/c/c5e68706527968282e49de205cc2b935823cb88a