sdhci-pci: bad error handling in probe function
The goto unmap is too early, we haven't allocated host or done the request_region(). Found by smatch (http://repo.or.cz/w/smatch.git). [ Second error path fix by Pierre Ossman ] Signed-off-by: Dan Carpenter <error27@gmail.com> Signed-off-by: Pierre Ossman <pierre@ossman.eu>
This commit is contained in:
parent
548d2de9bd
commit
c60a32cd12
@ -522,8 +522,8 @@ static struct sdhci_pci_slot * __devinit sdhci_pci_probe_slot(
|
|||||||
|
|
||||||
host = sdhci_alloc_host(&pdev->dev, sizeof(struct sdhci_pci_slot));
|
host = sdhci_alloc_host(&pdev->dev, sizeof(struct sdhci_pci_slot));
|
||||||
if (IS_ERR(host)) {
|
if (IS_ERR(host)) {
|
||||||
ret = PTR_ERR(host);
|
dev_err(&pdev->dev, "cannot allocate host\n");
|
||||||
goto unmap;
|
return ERR_PTR(PTR_ERR(host));
|
||||||
}
|
}
|
||||||
|
|
||||||
slot = sdhci_priv(host);
|
slot = sdhci_priv(host);
|
||||||
@ -541,7 +541,7 @@ static struct sdhci_pci_slot * __devinit sdhci_pci_probe_slot(
|
|||||||
ret = pci_request_region(pdev, bar, mmc_hostname(host->mmc));
|
ret = pci_request_region(pdev, bar, mmc_hostname(host->mmc));
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(&pdev->dev, "cannot request region\n");
|
dev_err(&pdev->dev, "cannot request region\n");
|
||||||
return ERR_PTR(ret);
|
goto free;
|
||||||
}
|
}
|
||||||
|
|
||||||
addr = pci_resource_start(pdev, bar);
|
addr = pci_resource_start(pdev, bar);
|
||||||
@ -572,6 +572,8 @@ static struct sdhci_pci_slot * __devinit sdhci_pci_probe_slot(
|
|||||||
|
|
||||||
release:
|
release:
|
||||||
pci_release_region(pdev, bar);
|
pci_release_region(pdev, bar);
|
||||||
|
|
||||||
|
free:
|
||||||
sdhci_free_host(host);
|
sdhci_free_host(host);
|
||||||
|
|
||||||
return ERR_PTR(ret);
|
return ERR_PTR(ret);
|
||||||
|
Loading…
Reference in New Issue
Block a user