CVE-2025-37843
Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
09/05/2025
Last modified:
17/11/2025
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
PCI: pciehp: Avoid unnecessary device replacement check<br />
<br />
Hot-removal of nested PCI hotplug ports suffers from a long-standing race<br />
condition which can lead to a deadlock: A parent hotplug port acquires<br />
pci_lock_rescan_remove(), then waits for pciehp to unbind from a child<br />
hotplug port. Meanwhile that child hotplug port tries to acquire<br />
pci_lock_rescan_remove() as well in order to remove its own children.<br />
<br />
The deadlock only occurs if the parent acquires pci_lock_rescan_remove()<br />
first, not if the child happens to acquire it first.<br />
<br />
Several workarounds to avoid the issue have been proposed and discarded<br />
over the years, e.g.:<br />
<br />
https://lore.kernel.org/r/4c882e25194ba8282b78fe963fec8faae7cf23eb.1529173804.git.lukas@wunner.de/<br />
<br />
A proper fix is being worked on, but needs more time as it is nontrivial<br />
and necessarily intrusive.<br />
<br />
Recent commit 9d573d19547b ("PCI: pciehp: Detect device replacement during<br />
system sleep") provokes more frequent occurrence of the deadlock when<br />
removing more than one Thunderbolt device during system sleep. The commit<br />
sought to detect device replacement, but also triggered on device removal.<br />
Differentiating reliably between replacement and removal is impossible<br />
because pci_get_dsn() returns 0 both if the device was removed, as well as<br />
if it was replaced with one lacking a Device Serial Number.<br />
<br />
Avoid the more frequent occurrence of the deadlock by checking whether the<br />
hotplug port itself was hot-removed. If so, there&#39;s no sense in checking<br />
whether its child device was replaced.<br />
<br />
This works because the ->resume_noirq() callback is invoked in top-down<br />
order for the entire hierarchy: A parent hotplug port detecting device<br />
replacement (or removal) marks all children as removed using<br />
pci_dev_set_disconnected() and a child hotplug port can then reliably<br />
detect being removed.
Impact
Base Score 3.x
5.50
Severity 3.x
MEDIUM
Vulnerable products and versions
| CPE | From | Up to |
|---|---|---|
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.11 (including) | 6.12.24 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.13 (including) | 6.13.12 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.14 (including) | 6.14.3 (excluding) |
To consult the complete list of CPE names with products and versions, see this page



