mmc: sdhci-of-at91: fix memleak on clk_get failure
authorMichał Mirosław <mirq-linux@rere.qmqm.pl>
Thu, 2 Jan 2020 10:42:16 +0000 (11:42 +0100)
committerUlf Hansson <ulf.hansson@linaro.org>
Thu, 16 Jan 2020 11:37:39 +0000 (12:37 +0100)
sdhci_alloc_host() does its work not using managed infrastructure, so
needs explicit free on error path. Add it where needed.

Cc: <stable@vger.kernel.org>
Fixes: bb5f8ea4d514 ("mmc: sdhci-of-at91: introduce driver for the Atmel SDMMC")
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Acked-by: Ludovic Desroches <ludovic.desroches@microchip.com>
Acked-by: Adrian Hunter <adrian.hunter@intel.com>
Link: https://lore.kernel.org/r/b2a44d5be2e06ff075f32477e466598bb0f07b36.1577961679.git.mirq-linux@rere.qmqm.pl
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/sdhci-of-at91.c

index b2a8c45..ab2bd31 100644 (file)
@@ -345,20 +345,23 @@ static int sdhci_at91_probe(struct platform_device *pdev)
                        priv->mainck = NULL;
                } else {
                        dev_err(&pdev->dev, "failed to get baseclk\n");
-                       return PTR_ERR(priv->mainck);
+                       ret = PTR_ERR(priv->mainck);
+                       goto sdhci_pltfm_free;
                }
        }
 
        priv->hclock = devm_clk_get(&pdev->dev, "hclock");
        if (IS_ERR(priv->hclock)) {
                dev_err(&pdev->dev, "failed to get hclock\n");
-               return PTR_ERR(priv->hclock);
+               ret = PTR_ERR(priv->hclock);
+               goto sdhci_pltfm_free;
        }
 
        priv->gck = devm_clk_get(&pdev->dev, "multclk");
        if (IS_ERR(priv->gck)) {
                dev_err(&pdev->dev, "failed to get multclk\n");
-               return PTR_ERR(priv->gck);
+               ret = PTR_ERR(priv->gck);
+               goto sdhci_pltfm_free;
        }
 
        ret = sdhci_at91_set_clks_presets(&pdev->dev);