Description
In the Linux kernel, the following vulnerability has been resolved: PCI: Fix pci_slot_trylock() error handling Commit a4e772898f8b ("PCI: Add missing bridge lock to pci_bus_lock()") delegates the bridge device's pci_dev_trylock() to pci_bus_trylock() in pci_slot_trylock(), but it forgets to remove the corresponding pci_dev_unlock() when pci_bus_trylock() fails. Before a4e772898f8b, the code did: if (!pci_dev_trylock(dev)) /* <- lock bridge device */ goto unlock; if (dev->subordinate) { if (!pci_bus_trylock(dev->subordinate)) { pci_dev_unlock(dev); /* <- unlock bridge device */ goto unlock; } } After a4e772898f8b the bridge-device lock is no longer taken, but the pci_dev_unlock(dev) on the failure path was left in place, leading to the bug. This yields one of two errors: 1. A warning that the lock is being unlocked when no one holds it. 2. An incorrect unlock of a lock that belongs to another thread. Fix it by removing the now-redundant pci_dev_unlock(dev) on the failure path. [Same patch later posted by Keith at https://patch.msgid.link/20260116184150.3013258-1-kbusch@meta.com]
Product status
e2355d513b89a2cb511b4ded0deb426cdb01acd0 (git) before ebb27b7399ab8b9eb1f792b329aa5f6250c590d4
04e85a3285b0e5c5af6fd2c0fd6e95ffecc01945 (git) before fbe06a3058114bf95a17a4941b205f4b321c6f0a
7253b4fed46471cc247c6cacefac890a8472c083 (git) before 943ed56606a7ab2fe5a99cad572dd17d484310c7
78c6e39fef5c428960aff742149bba302dd46f5a (git) before a19b61fdb958ffadbba85b43c991eb9fc70c1c1c
a4e772898f8bf2e7e1cf661a12c60a5612c4afab (git) before 0425aaf20b407d2f2cf3bf469808e4a35f9abb8b
a4e772898f8bf2e7e1cf661a12c60a5612c4afab (git) before bd435f4b738130d732ef64e0e57e45185f77165d
a4e772898f8bf2e7e1cf661a12c60a5612c4afab (git) before 8b08ea9690b212b7bf7f12414039259cf34b1aa0
a4e772898f8bf2e7e1cf661a12c60a5612c4afab (git) before 9368d1ee62829b08aa31836b3ca003803caf0b72
0790b89c7e911003b8c50ae50e3ac7645de1fae9 (git)
df77a678c33871a6e4ac5b54a71662f1d702335b (git)
81c68e218ab883dfa368460a59b674084c0240da (git)
6.11
Any version before 6.11
5.10.252 (semver)
5.15.202 (semver)
6.1.165 (semver)
6.6.128 (semver)
6.12.75 (semver)
6.18.16 (semver)
6.19.6 (semver)
7.0 (original_commit_for_fix)
References
git.kernel.org/...c/ebb27b7399ab8b9eb1f792b329aa5f6250c590d4
git.kernel.org/...c/fbe06a3058114bf95a17a4941b205f4b321c6f0a
git.kernel.org/...c/943ed56606a7ab2fe5a99cad572dd17d484310c7
git.kernel.org/...c/a19b61fdb958ffadbba85b43c991eb9fc70c1c1c
git.kernel.org/...c/0425aaf20b407d2f2cf3bf469808e4a35f9abb8b
git.kernel.org/...c/bd435f4b738130d732ef64e0e57e45185f77165d
git.kernel.org/...c/8b08ea9690b212b7bf7f12414039259cf34b1aa0
git.kernel.org/...c/9368d1ee62829b08aa31836b3ca003803caf0b72