Эх сурвалжийг харах

mcb: Fix error handling in mcb_pci_probe()

If a MCB PCI Carrier device is IO mapped insted of memory-mapped,
the memory of the PCI device is still not unmapped.

Also the patch adds deallocation of the bus
if chameleon_parse_cells() fails.

Found by Linux Driver Verification project (linuxtesting.org).

Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Alexey Khoroshilov 10 жил өмнө
parent
commit
41ada9df7f

+ 4 - 2
drivers/mcb/mcb-pci.c

@@ -74,7 +74,7 @@ static int mcb_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 		ret = -ENOTSUPP;
 		ret = -ENOTSUPP;
 		dev_err(&pdev->dev,
 		dev_err(&pdev->dev,
 			"IO mapped PCI devices are not supported\n");
 			"IO mapped PCI devices are not supported\n");
-		goto out_release;
+		goto out_iounmap;
 	}
 	}
 
 
 	pci_set_drvdata(pdev, priv);
 	pci_set_drvdata(pdev, priv);
@@ -89,7 +89,7 @@ static int mcb_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 
 
 	ret = chameleon_parse_cells(priv->bus, priv->mapbase, priv->base);
 	ret = chameleon_parse_cells(priv->bus, priv->mapbase, priv->base);
 	if (ret < 0)
 	if (ret < 0)
-		goto out_iounmap;
+		goto out_mcb_bus;
 	num_cells = ret;
 	num_cells = ret;
 
 
 	dev_dbg(&pdev->dev, "Found %d cells\n", num_cells);
 	dev_dbg(&pdev->dev, "Found %d cells\n", num_cells);
@@ -98,6 +98,8 @@ static int mcb_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 
 
 	return 0;
 	return 0;
 
 
+out_mcb_bus:
+	mcb_release_bus(priv->bus);
 out_iounmap:
 out_iounmap:
 	iounmap(priv->base);
 	iounmap(priv->base);
 out_release:
 out_release: