diff options
author | Dan Carpenter <error27@gmail.com> | 2009-04-10 17:31:10 -0400 |
---|---|---|
committer | Pierre Ossman <pierre@ossman.eu> | 2009-05-03 16:11:19 -0400 |
commit | c60a32cd129b1c41f98888b03ba2904406bac8f8 (patch) | |
tree | a80cf164fc2de787c4b04240726828b116069c0d /drivers/mmc | |
parent | 548d2de9bd978a4d4e941477500f1ab97aade137 (diff) |
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>
Diffstat (limited to 'drivers/mmc')
-rw-r--r-- | drivers/mmc/host/sdhci-pci.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/mmc/host/sdhci-pci.c b/drivers/mmc/host/sdhci-pci.c index cd37962ec44f..65be27995d5c 100644 --- a/drivers/mmc/host/sdhci-pci.c +++ b/drivers/mmc/host/sdhci-pci.c | |||
@@ -522,8 +522,8 @@ static struct sdhci_pci_slot * __devinit sdhci_pci_probe_slot( | |||
522 | 522 | ||
523 | host = sdhci_alloc_host(&pdev->dev, sizeof(struct sdhci_pci_slot)); | 523 | host = sdhci_alloc_host(&pdev->dev, sizeof(struct sdhci_pci_slot)); |
524 | if (IS_ERR(host)) { | 524 | if (IS_ERR(host)) { |
525 | ret = PTR_ERR(host); | 525 | dev_err(&pdev->dev, "cannot allocate host\n"); |
526 | goto unmap; | 526 | return ERR_PTR(PTR_ERR(host)); |
527 | } | 527 | } |
528 | 528 | ||
529 | slot = sdhci_priv(host); | 529 | slot = sdhci_priv(host); |
@@ -541,7 +541,7 @@ static struct sdhci_pci_slot * __devinit sdhci_pci_probe_slot( | |||
541 | ret = pci_request_region(pdev, bar, mmc_hostname(host->mmc)); | 541 | ret = pci_request_region(pdev, bar, mmc_hostname(host->mmc)); |
542 | if (ret) { | 542 | if (ret) { |
543 | dev_err(&pdev->dev, "cannot request region\n"); | 543 | dev_err(&pdev->dev, "cannot request region\n"); |
544 | return ERR_PTR(ret); | 544 | goto free; |
545 | } | 545 | } |
546 | 546 | ||
547 | addr = pci_resource_start(pdev, bar); | 547 | addr = pci_resource_start(pdev, bar); |
@@ -572,6 +572,8 @@ unmap: | |||
572 | 572 | ||
573 | release: | 573 | release: |
574 | pci_release_region(pdev, bar); | 574 | pci_release_region(pdev, bar); |
575 | |||
576 | free: | ||
575 | sdhci_free_host(host); | 577 | sdhci_free_host(host); |
576 | 578 | ||
577 | return ERR_PTR(ret); | 579 | return ERR_PTR(ret); |