aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci
diff options
context:
space:
mode:
authorGreg KH <gregkh@suse.de>2008-08-21 13:47:58 -0700
committerJesse Barnes <jbarnes@virtuousgeek.org>2008-08-21 15:22:46 -0700
commitebca4f1bce1eb7b91a63c515db66316db9391221 (patch)
treedd65b7eb4437bca869fc1f6c792e4e43684a1f1e /drivers/pci
parentd6a9e9b40be7da84f82eb414c2ad98c5bb69986b (diff)
downloadkernel_samsung_crespo-ebca4f1bce1eb7b91a63c515db66316db9391221.zip
kernel_samsung_crespo-ebca4f1bce1eb7b91a63c515db66316db9391221.tar.gz
kernel_samsung_crespo-ebca4f1bce1eb7b91a63c515db66316db9391221.tar.bz2
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: 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/pci')
-rw-r--r--drivers/pci/search.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/pci/search.c b/drivers/pci/search.c
index 217814f..3b3b5f1 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;
}