linux/drivers/pci/controller
Dexuan Cui 05f151a73e PCI: hv: Fix a memory leak in hv_eject_device_work()
When a device is created in new_pcichild_device(), hpdev->refs is set
to 2 (i.e. the initial value of 1 plus the get_pcichild()).

When we hot remove the device from the host, in a Linux VM we first call
hv_pci_eject_device(), which increases hpdev->refs by get_pcichild() and
then schedules a work of hv_eject_device_work(), so hpdev->refs becomes
3 (let's ignore the paired get/put_pcichild() in other places). But in
hv_eject_device_work(), currently we only call put_pcichild() twice,
meaning the 'hpdev' struct can't be freed in put_pcichild().

Add one put_pcichild() to fix the memory leak.

The device can also be removed when we run "rmmod pci-hyperv". On this
path (hv_pci_remove() -> hv_pci_bus_exit() -> hv_pci_devices_present()),
hpdev->refs is 2, and we do correctly call put_pcichild() twice in
pci_devices_present_work().

Fixes: 4daace0d8c ("PCI: hv: Add paravirtual PCI front-end for Microsoft Hyper-V VMs")
Signed-off-by: Dexuan Cui <decui@microsoft.com>
[lorenzo.pieralisi@arm.com: commit log rework]
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reviewed-by: Stephen Hemminger <stephen@networkplumber.org>
Reviewed-by:  Michael Kelley <mikelley@microsoft.com>
Cc: stable@vger.kernel.org
2019-03-26 19:12:08 +00:00
..
dwc pci-v5.1-changes 2019-03-09 14:57:08 -08:00
Kconfig PCI: altera: Enable driver on ARM64 2019-03-04 12:22:19 +00:00
Makefile PCI: mobiveil: Add Kconfig/Makefile entries 2018-07-30 14:30:16 +01:00
pci-aardvark.c PCI: aardvark: Make symbol 'advk_pci_bridge_emul_ops' static 2019-03-01 15:23:06 +00:00
pci-ftpci100.c PCI: faraday: Fix I/O space page leak 2018-07-18 17:01:14 -05:00
pci-host-common.c PCI: Remove unnecessary check of device_type == pci 2018-09-25 09:40:03 +01:00
pci-host-generic.c
pci-hyperv.c PCI: hv: Fix a memory leak in hv_eject_device_work() 2019-03-26 19:12:08 +00:00
pci-mvebu.c PCI: pci-bridge-emul: Extend pci_bridge_emul_init() with flags 2019-02-22 10:51:14 +00:00
pci-rcar-gen2.c
pci-tegra.c
pci-thunder-ecam.c
pci-thunder-pem.c
pci-v3-semi.c PCI: v3-semi: Fix I/O space page leak 2018-07-18 17:02:13 -05:00
pci-versatile.c PCI: versatile: Fix I/O space page leak 2018-07-18 17:00:11 -05:00
pci-xgene-msi.c
pci-xgene.c PCI: xgene: Fix I/O space page leak 2018-07-18 16:59:40 -05:00
pcie-altera-msi.c
pcie-altera.c PCI: altera: Add Stratix 10 PCIe support 2019-03-04 12:22:03 +00:00
pcie-cadence-ep.c PCI: cadence: Remove pci_epf_linkup() from Cadence EP driver 2019-02-15 10:02:38 +00:00
pcie-cadence-host.c PCI: Remove unnecessary check of device_type == pci 2018-09-25 09:40:03 +01:00
pcie-cadence.c pci-v4.20-changes 2018-10-25 06:50:48 -07:00
pcie-cadence.h PCI: cadence: Add Power Management ops for host and EP 2018-07-12 12:44:14 +01:00
pcie-iproc-bcma.c
pcie-iproc-msi.c cross-tree: phase out dma_zalloc_coherent() 2019-01-08 07:58:37 -05:00
pcie-iproc-platform.c
pcie-iproc.c PCI: iproc: Remove PAXC slot check to allow VF support 2018-09-18 10:13:04 +01:00
pcie-iproc.h PCI: iproc: Reject unconfigured physical functions from PAXC 2018-07-13 11:56:55 +01:00
pcie-mediatek.c PCI: mediatek: Enlarge PCIe2AHB window size to support 4GB DRAM 2019-03-01 11:22:21 +00:00
pcie-mobiveil.c PCI: Remove unnecessary check of device_type == pci 2018-09-25 09:40:03 +01:00
pcie-rcar.c PCI: rcar: Add the initialization of PCIe link in resume_noirq() 2019-03-26 11:14:13 +00:00
pcie-rockchip-ep.c PCI: rockchip: Remove pci_epf_linkup() from Rockchip EP driver 2019-02-15 10:02:50 +00:00
pcie-rockchip-host.c
pcie-rockchip.c
pcie-rockchip.h
pcie-tango.c
pcie-xilinx-nwl.c PCI: Remove unnecessary check of device_type == pci 2018-09-25 09:40:03 +01:00
pcie-xilinx.c PCI: Remove unnecessary check of device_type == pci 2018-09-25 09:40:03 +01:00
vmd.c PCI/VMD: Configure MPS settings before adding devices 2019-01-30 11:00:04 +00:00