aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci
diff options
context:
space:
mode:
authorJiang Liu <jiang.liu@huawei.com>2013-01-21 16:20:45 -0500
committerBjorn Helgaas <bhelgaas@google.com>2013-01-25 15:49:27 -0500
commitd5af7d987a494a1b85e176b4c33dc115cb111662 (patch)
treeb4566d25bb2b102d4d4ae9138f6f4c26caea848d /drivers/pci
parent7629d19a4df922e7497e170c1c7b508b5e27f486 (diff)
PCI: Fix reference count leak in pci_dev_present()
Function pci_get_dev_by_id() takes a reference on the pci_dev returned, so pci_dev_present() should release the corresponding reference. Signed-off-by: Jiang Liu <jiang.liu@huawei.com> Signed-off-by: Yinghai Lu <yinghai@kernel.org> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'drivers/pci')
-rw-r--r--drivers/pci/search.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/pci/search.c b/drivers/pci/search.c
index bf969ba58e59..d0627fa9f368 100644
--- a/drivers/pci/search.c
+++ b/drivers/pci/search.c
@@ -319,13 +319,13 @@ int pci_dev_present(const struct pci_device_id *ids)
319 WARN_ON(in_interrupt()); 319 WARN_ON(in_interrupt());
320 while (ids->vendor || ids->subvendor || ids->class_mask) { 320 while (ids->vendor || ids->subvendor || ids->class_mask) {
321 found = pci_get_dev_by_id(ids, NULL); 321 found = pci_get_dev_by_id(ids, NULL);
322 if (found) 322 if (found) {
323 goto exit; 323 pci_dev_put(found);
324 return 1;
325 }
324 ids++; 326 ids++;
325 } 327 }
326exit: 328
327 if (found)
328 return 1;
329 return 0; 329 return 0;
330} 330}
331EXPORT_SYMBOL(pci_dev_present); 331EXPORT_SYMBOL(pci_dev_present);