mirror of
https://github.com/nxp-imx/linux-imx.git
synced 2025-07-12 20:35:23 +02:00
powerpc/eeh: avoid possible crash when edev->pdev changes
[ Upstream commit a1216e62d0
]
If a PCI device is removed during eeh_pe_report_edev(), edev->pdev
will change and can cause a crash, hold the PCI rescan/remove lock
while taking a copy of edev->pdev->bus.
Signed-off-by: Ganesh Goudar <ganeshgr@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20240617140240.580453-1-ganeshgr@linux.ibm.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
e512a59b47
commit
f23c3d1ca9
|
@ -849,6 +849,7 @@ struct pci_bus *eeh_pe_bus_get(struct eeh_pe *pe)
|
||||||
{
|
{
|
||||||
struct eeh_dev *edev;
|
struct eeh_dev *edev;
|
||||||
struct pci_dev *pdev;
|
struct pci_dev *pdev;
|
||||||
|
struct pci_bus *bus = NULL;
|
||||||
|
|
||||||
if (pe->type & EEH_PE_PHB)
|
if (pe->type & EEH_PE_PHB)
|
||||||
return pe->phb->bus;
|
return pe->phb->bus;
|
||||||
|
@ -859,9 +860,11 @@ struct pci_bus *eeh_pe_bus_get(struct eeh_pe *pe)
|
||||||
|
|
||||||
/* Retrieve the parent PCI bus of first (top) PCI device */
|
/* Retrieve the parent PCI bus of first (top) PCI device */
|
||||||
edev = list_first_entry_or_null(&pe->edevs, struct eeh_dev, entry);
|
edev = list_first_entry_or_null(&pe->edevs, struct eeh_dev, entry);
|
||||||
|
pci_lock_rescan_remove();
|
||||||
pdev = eeh_dev_to_pci_dev(edev);
|
pdev = eeh_dev_to_pci_dev(edev);
|
||||||
if (pdev)
|
if (pdev)
|
||||||
return pdev->bus;
|
bus = pdev->bus;
|
||||||
|
pci_unlock_rescan_remove();
|
||||||
|
|
||||||
return NULL;
|
return bus;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user