]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
PCI: rockchip: Protect root bus removal with rescan lock
authorHans Zhang <18255117159@163.com>
Thu, 21 May 2026 16:18:20 +0000 (00:18 +0800)
committerBjorn Helgaas <bhelgaas@google.com>
Thu, 18 Jun 2026 16:50:55 +0000 (11:50 -0500)
Hold the pci_rescan_remove_lock lock while stopping and removing a root bus
to avoid racing with concurrent rescan or hotplug operations triggered via
sysfs.  Such races may lead to use-after-free issues or system crashes.

Signed-off-by: Hans Zhang <18255117159@163.com>
Signed-off-by: Manivannan Sadhasivam <mani@kernel.org>
[bhelgaas: commit log]
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Link: https://patch.msgid.link/20260521161822.132996-8-18255117159@163.com
drivers/pci/controller/pcie-rockchip-host.c

index ee1822ca01db34dd51dd70f770e105686e89509b..d203c4876d30413cd9429d93f9c309c1af2020a5 100644 (file)
@@ -1012,8 +1012,10 @@ static void rockchip_pcie_remove(struct platform_device *pdev)
        struct rockchip_pcie *rockchip = dev_get_drvdata(dev);
        struct pci_host_bridge *bridge = pci_host_bridge_from_priv(rockchip);
 
+       pci_lock_rescan_remove();
        pci_stop_root_bus(bridge->bus);
        pci_remove_root_bus(bridge->bus);
+       pci_unlock_rescan_remove();
        irq_domain_remove(rockchip->irq_domain);
 
        rockchip_pcie_deinit_phys(rockchip);