CVE-2024-46750

Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
18/09/2024
Last modified:
30/09/2024

Description

In the Linux kernel, the following vulnerability has been resolved:<br /> <br /> PCI: Add missing bridge lock to pci_bus_lock()<br /> <br /> One of the true positives that the cfg_access_lock lockdep effort<br /> identified is this sequence:<br /> <br /> WARNING: CPU: 14 PID: 1 at drivers/pci/pci.c:4886 pci_bridge_secondary_bus_reset+0x5d/0x70<br /> RIP: 0010:pci_bridge_secondary_bus_reset+0x5d/0x70<br /> Call Trace:<br /> <br /> ? __warn+0x8c/0x190<br /> ? pci_bridge_secondary_bus_reset+0x5d/0x70<br /> ? report_bug+0x1f8/0x200<br /> ? handle_bug+0x3c/0x70<br /> ? exc_invalid_op+0x18/0x70<br /> ? asm_exc_invalid_op+0x1a/0x20<br /> ? pci_bridge_secondary_bus_reset+0x5d/0x70<br /> pci_reset_bus+0x1d8/0x270<br /> vmd_probe+0x778/0xa10<br /> pci_device_probe+0x95/0x120<br /> <br /> Where pci_reset_bus() users are triggering unlocked secondary bus resets.<br /> Ironically pci_bus_reset(), several calls down from pci_reset_bus(), uses<br /> pci_bus_lock() before issuing the reset which locks everything *but* the<br /> bridge itself.<br /> <br /> For the same motivation as adding:<br /> <br /> bridge = pci_upstream_bridge(dev);<br /> if (bridge)<br /> pci_dev_lock(bridge);<br /> <br /> to pci_reset_function() for the "bus" and "cxl_bus" reset cases, add<br /> pci_dev_lock() for @bus-&gt;self to pci_bus_lock().<br /> <br /> [bhelgaas: squash in recursive locking deadlock fix from Keith Busch:<br /> https://lore.kernel.org/r/20240711193650.701834-1-kbusch@meta.com]

Vulnerable products and versions

CPE From Up to
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 4.19.322 (excluding)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 4.20 (including) 5.4.284 (excluding)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.5 (including) 5.10.226 (excluding)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.11 (including) 5.15.167 (excluding)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.16 (including) 6.1.110 (excluding)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.2 (including) 6.6.51 (excluding)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.7 (including) 6.10.10 (excluding)