| From ea56b8f5a8babd7b717bb419e3b11e39aaa9b8ae Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 2 Jan 2020 11:42:16 +0100 |
| Subject: mmc: sdhci-of-at91: fix memleak on clk_get failure |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Michał Mirosław <mirq-linux@rere.qmqm.pl> |
| |
| [ Upstream commit a04184ce777b46e92c2b3c93c6dcb2754cb005e1 ] |
| |
| 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> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/mmc/host/sdhci-of-at91.c | 9 ++++++--- |
| 1 file changed, 6 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/mmc/host/sdhci-of-at91.c b/drivers/mmc/host/sdhci-of-at91.c |
| index 1ebcf0eb781ea..04e88d4796fa9 100644 |
| --- a/drivers/mmc/host/sdhci-of-at91.c |
| +++ b/drivers/mmc/host/sdhci-of-at91.c |
| @@ -332,19 +332,22 @@ static int sdhci_at91_probe(struct platform_device *pdev) |
| priv->mainck = devm_clk_get(&pdev->dev, "baseclk"); |
| if (IS_ERR(priv->mainck)) { |
| 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); |
| -- |
| 2.20.1 |
| |