Commit 699ed49
CKI Backport Bot
PCI: Add missing bridge lock to pci_bus_lock()
JIRA: https://issues.redhat.com/browse/RHEL-59331
CVE: CVE-2024-46750
commit a4e7728
Author: Dan Williams <dan.j.williams@intel.com>
Date: Thu May 30 18:04:35 2024 -0700
PCI: Add missing bridge lock to pci_bus_lock()
One of the true positives that the cfg_access_lock lockdep effort
identified is this sequence:
WARNING: CPU: 14 PID: 1 at drivers/pci/pci.c:4886 pci_bridge_secondary_bus_reset+0x5d/0x70
RIP: 0010:pci_bridge_secondary_bus_reset+0x5d/0x70
Call Trace:
<TASK>
? __warn+0x8c/0x190
? pci_bridge_secondary_bus_reset+0x5d/0x70
? report_bug+0x1f8/0x200
? handle_bug+0x3c/0x70
? exc_invalid_op+0x18/0x70
? asm_exc_invalid_op+0x1a/0x20
? pci_bridge_secondary_bus_reset+0x5d/0x70
pci_reset_bus+0x1d8/0x270
vmd_probe+0x778/0xa10
pci_device_probe+0x95/0x120
Where pci_reset_bus() users are triggering unlocked secondary bus resets.
Ironically pci_bus_reset(), several calls down from pci_reset_bus(), uses
pci_bus_lock() before issuing the reset which locks everything *but* the
bridge itself.
For the same motivation as adding:
bridge = pci_upstream_bridge(dev);
if (bridge)
pci_dev_lock(bridge);
to pci_reset_function() for the "bus" and "cxl_bus" reset cases, add
pci_dev_lock() for @bus->self to pci_bus_lock().
Link: https://lore.kernel.org/r/171711747501.1628941.15217746952476635316.stgit@dwillia2-xfh.jf.intel.com
Reported-by: Imre Deak <imre.deak@intel.com>
Closes: http://lore.kernel.org/r/6657833b3b5ae_14984b29437@dwillia2-xfh.jf.intel.com.notmuch
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Keith Busch <kbusch@kernel.org>
[bhelgaas: squash in recursive locking deadlock fix from Keith Busch:
https://lore.kernel.org/r/20240711193650.701834-1-kbusch@meta.com]
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Tested-by: Hans de Goede <hdegoede@redhat.com>
Tested-by: Kalle Valo <kvalo@kernel.org>
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
Signed-off-by: CKI Backport Bot <cki-ci-bot+cki-gitlab-backport-bot@redhat.com>1 parent 1e629b3 commit 699ed49
1 file changed
+21
-14
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5360 | 5360 | | |
5361 | 5361 | | |
5362 | 5362 | | |
| 5363 | + | |
5363 | 5364 | | |
5364 | | - | |
5365 | 5365 | | |
5366 | 5366 | | |
| 5367 | + | |
| 5368 | + | |
5367 | 5369 | | |
5368 | 5370 | | |
5369 | 5371 | | |
| |||
5375 | 5377 | | |
5376 | 5378 | | |
5377 | 5379 | | |
5378 | | - | |
| 5380 | + | |
| 5381 | + | |
5379 | 5382 | | |
| 5383 | + | |
5380 | 5384 | | |
5381 | 5385 | | |
5382 | 5386 | | |
5383 | 5387 | | |
5384 | 5388 | | |
5385 | 5389 | | |
5386 | 5390 | | |
| 5391 | + | |
| 5392 | + | |
| 5393 | + | |
5387 | 5394 | | |
5388 | | - | |
5389 | | - | |
5390 | 5395 | | |
5391 | | - | |
5392 | | - | |
| 5396 | + | |
5393 | 5397 | | |
5394 | | - | |
5395 | | - | |
| 5398 | + | |
| 5399 | + | |
5396 | 5400 | | |
5397 | 5401 | | |
5398 | 5402 | | |
5399 | 5403 | | |
5400 | 5404 | | |
5401 | 5405 | | |
5402 | 5406 | | |
5403 | | - | |
| 5407 | + | |
| 5408 | + | |
5404 | 5409 | | |
| 5410 | + | |
5405 | 5411 | | |
5406 | 5412 | | |
5407 | 5413 | | |
| |||
5433 | 5439 | | |
5434 | 5440 | | |
5435 | 5441 | | |
5436 | | - | |
5437 | 5442 | | |
5438 | 5443 | | |
| 5444 | + | |
| 5445 | + | |
5439 | 5446 | | |
5440 | 5447 | | |
5441 | 5448 | | |
| |||
5461 | 5468 | | |
5462 | 5469 | | |
5463 | 5470 | | |
5464 | | - | |
5465 | | - | |
5466 | 5471 | | |
5467 | 5472 | | |
5468 | 5473 | | |
5469 | 5474 | | |
5470 | 5475 | | |
5471 | | - | |
| 5476 | + | |
| 5477 | + | |
5472 | 5478 | | |
5473 | 5479 | | |
5474 | 5480 | | |
| |||
5479 | 5485 | | |
5480 | 5486 | | |
5481 | 5487 | | |
5482 | | - | |
| 5488 | + | |
| 5489 | + | |
5483 | 5490 | | |
5484 | 5491 | | |
5485 | 5492 | | |
| |||
0 commit comments