diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2008-08-25 20:05:06 +0000 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2008-09-08 04:44:15 -0700 |
commit | 045eff1504ce63a080b79f931ec3d8e136fb65cd (patch) | |
tree | b3e734009e625b9fbba8e2522ba8bd3c8ec89238 /drivers | |
parent | 363875f5551b029ae63b5b1a3f3ccd72b9460339 (diff) |
PCI: fix reference leak in pci_get_dev_by_id()
commit ebca4f1bce1eb7b91a63c515db66316db9391221 upstream
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>
Tested-by: Alex Chiang <achiang@hp.com>
Acked-by: Alex Chiang <achiang@hp.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/pci/search.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/pci/search.c b/drivers/pci/search.c index 217814fef4e..3b3b5f17879 100644 --- a/drivers/pci/search.c +++ b/drivers/pci/search.c @@ -280,6 +280,8 @@ static struct pci_dev *pci_get_dev_by_id(const struct pci_device_id *id, match_pci_dev_by_id); if (dev) pdev = to_pci_dev(dev); + if (from) + pci_dev_put(from); return pdev; } |