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>
This commit is contained in:
Родитель
84dfe03ae2
Коммит
41ada9df7f
|
@ -74,7 +74,7 @@ static int mcb_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||
ret = -ENOTSUPP;
|
||||
dev_err(&pdev->dev,
|
||||
"IO mapped PCI devices are not supported\n");
|
||||
goto out_release;
|
||||
goto out_iounmap;
|
||||
}
|
||||
|
||||
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);
|
||||
if (ret < 0)
|
||||
goto out_iounmap;
|
||||
goto out_mcb_bus;
|
||||
num_cells = ret;
|
||||
|
||||
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;
|
||||
|
||||
out_mcb_bus:
|
||||
mcb_release_bus(priv->bus);
|
||||
out_iounmap:
|
||||
iounmap(priv->base);
|
||||
out_release:
|
||||
|
|
Загрузка…
Ссылка в новой задаче