Commit ebca4f1b authored by Greg KH's avatar Greg KH Committed by Jesse Barnes

PCI: fix reference leak in pci_get_dev_by_id()

Alex Chiang and Matthew Wilcox pointed out that pci_get_dev_by_id() does
not properly decrement the reference on the from pointer if it is
present, like the documentation for the function states it will.

It fixes a pretty bad leak in the hotplug core (we were leaking an
entire struct pci_dev for each function of each offlined card, the first
time around; subsequent onlines/offlines were ok).

Cc: Matthew Wilcox <matthew@wil.cx>
Cc: stable <stable@kernel.org>
Tested-by: default avatarAlex Chiang <achiang@hp.com>
Acked-by: default avatarAlex Chiang <achiang@hp.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
Signed-off-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
parent d6a9e9b4
...@@ -280,6 +280,8 @@ static struct pci_dev *pci_get_dev_by_id(const struct pci_device_id *id, ...@@ -280,6 +280,8 @@ static struct pci_dev *pci_get_dev_by_id(const struct pci_device_id *id,
match_pci_dev_by_id); match_pci_dev_by_id);
if (dev) if (dev)
pdev = to_pci_dev(dev); pdev = to_pci_dev(dev);
if (from)
pci_dev_put(from);
return pdev; return pdev;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment