Merge branch 'pci/dpc'
- If there's a device below a bridge, prevent a use-after-free by holding a reference to the device while waiting for the secondary bus to be ready in case the device is concurrently removed, e.g., by DPC (Lukas Wunner) * pci/dpc: PCI/DPC: Fix use-after-free on concurrent DPC and hot-removal
This commit is contained in:
commit
147ea50e1e
@ -4823,7 +4823,7 @@ static int pci_bus_max_d3cold_delay(const struct pci_bus *bus)
|
|||||||
*/
|
*/
|
||||||
int pci_bridge_wait_for_secondary_bus(struct pci_dev *dev, char *reset_type)
|
int pci_bridge_wait_for_secondary_bus(struct pci_dev *dev, char *reset_type)
|
||||||
{
|
{
|
||||||
struct pci_dev *child;
|
struct pci_dev *child __free(pci_dev_put) = NULL;
|
||||||
int delay;
|
int delay;
|
||||||
|
|
||||||
if (pci_dev_is_disconnected(dev))
|
if (pci_dev_is_disconnected(dev))
|
||||||
@ -4852,8 +4852,8 @@ int pci_bridge_wait_for_secondary_bus(struct pci_dev *dev, char *reset_type)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
child = list_first_entry(&dev->subordinate->devices, struct pci_dev,
|
child = pci_dev_get(list_first_entry(&dev->subordinate->devices,
|
||||||
bus_list);
|
struct pci_dev, bus_list));
|
||||||
up_read(&pci_bus_sem);
|
up_read(&pci_bus_sem);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user