Skip to content

Commit

Permalink
sdhci-pci: bad error handling in probe function
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Dan Carpenter authored and Pierre Ossman committed May 3, 2009
1 parent 548d2de commit c60a32c
Showing 1 changed file with 5 additions and 3 deletions.
8 changes: 5 additions & 3 deletions drivers/mmc/host/sdhci-pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -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));
if (IS_ERR(host)) {
ret = PTR_ERR(host);
goto unmap;
dev_err(&pdev->dev, "cannot allocate host\n");
return ERR_PTR(PTR_ERR(host));
}

slot = sdhci_priv(host);
Expand All @@ -541,7 +541,7 @@ static struct sdhci_pci_slot * __devinit sdhci_pci_probe_slot(
ret = pci_request_region(pdev, bar, mmc_hostname(host->mmc));
if (ret) {
dev_err(&pdev->dev, "cannot request region\n");
return ERR_PTR(ret);
goto free;
}

addr = pci_resource_start(pdev, bar);
Expand Down Expand Up @@ -572,6 +572,8 @@ static struct sdhci_pci_slot * __devinit sdhci_pci_probe_slot(

release:
pci_release_region(pdev, bar);

free:
sdhci_free_host(host);

return ERR_PTR(ret);
Expand Down

0 comments on commit c60a32c

Please sign in to comment.