mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2025-12-05 09:26:11 +00:00
The struct pci_dev uses reference counting but zPCI assumed erroneously that the last reference would always be the local reference after calling pci_stop_and_remove_bus_device(). This is usually the case but not how reference counting works and thus inherently fragile. In fact one case where this causes a NULL pointer dereference when on an SRIOV device the function 0 was hot unplugged before another function of the same multi-function device. In this case the second function's pdev->sriov->dev reference keeps the struct pci_dev of function 0 alive even after the unplug. This bug was previously hidden by the fact that we were leaking the struct pci_dev which in turn means that it always outlived the struct zpci_dev. This was fixed in commit |
||
|---|---|---|
| .. | ||
| Makefile | ||
| pci_bus.c | ||
| pci_bus.h | ||
| pci_clp.c | ||
| pci_debug.c | ||
| pci_dma.c | ||
| pci_event.c | ||
| pci_insn.c | ||
| pci_iov.c | ||
| pci_iov.h | ||
| pci_irq.c | ||
| pci_mmio.c | ||
| pci_sysfs.c | ||
| pci.c | ||