]> xenbits.xensource.com Git - legacy/linux-2.6.18-xen.git/commitdiff
pcifront: fix PCI reference leak
authorKeir Fraser <keir@xen.org>
Mon, 15 Nov 2010 09:32:57 +0000 (09:32 +0000)
committerKeir Fraser <keir@xen.org>
Mon, 15 Nov 2010 09:32:57 +0000 (09:32 +0000)
Stanse found that when pdev is found and has no driver a reference is
leaked in pcifront_common_process. So add pci_dev_put there. For the
pdev == NULL case, pci_dev_put(NULL) is fine.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
From: Jiri Slaby <jslaby@suse.cz>
Subject: pcifront: fix potential NULL dereference

Milton spotted that we dereference NULL in one fail path in
pcifront_common_process. Fix that by using different device to print
out an error.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Cc: Milton Miller <miltonm@bga.com>
Signed-off-by: Jan Beulich <jbeulich@novell.com>
drivers/xen/pcifront/pci_op.c

index b1fc6b3c5bf687438adc87fdd81b760823a447db..474a132216641caaa1c613613e2b8b04f946370d 100644 (file)
@@ -592,9 +592,9 @@ static pci_ers_result_t pcifront_common_process( int cmd, struct pcifront_device
        result = PCI_ERS_RESULT_NONE;
 
        pcidev = pci_get_bus_and_slot(bus, devfn);
-       if (!pcidev || !pcidev->driver){
-               dev_err(&pcidev->dev, 
-                       "device or driver is NULL\n");
+       if (!pcidev || !pcidev->driver) {
+               pci_dev_put(pcidev);
+               dev_err(&pdev->xdev->dev, "AER device or driver is NULL\n");
                return result;
        }
        pdrv = pcidev->driver;