drivers: mmc: iproc_sdhci: fix possible memory leak
authorBharat Kumar Reddy Gooty <bharat.gooty@broadcom.com>
Tue, 31 Mar 2020 05:34:03 +0000 (11:04 +0530)
committerPeng Fan <peng.fan@nxp.com>
Wed, 22 Apr 2020 12:41:55 +0000 (20:41 +0800)
Free the pointer variable 'iproc_sdhci' upon failure to fix
possible memory leak.

Signed-off-by: Bharat Kumar Reddy Gooty <bharat.gooty@broadcom.com>
Signed-off-by: Rayagonda Kokatanur <rayagonda.kokatanur@broadcom.com>
drivers/mmc/iproc_sdhci.c

index 831dd32eb79692f9ea1a559f8f12a3a2e989cce1..36ecdba5c6aa947faa3ca8c497ed1eb7b84e435b 100644 (file)
@@ -176,8 +176,7 @@ static int iproc_sdhci_probe(struct udevice *dev)
        u32 f_min_max[2];
        int ret;
 
-       iproc_host = (struct sdhci_iproc_host *)
-                       malloc(sizeof(struct sdhci_iproc_host));
+       iproc_host = malloc(sizeof(struct sdhci_iproc_host));
        if (!iproc_host) {
                printf("%s: sdhci host malloc fail!\n", __func__);
                return -ENOMEM;
@@ -198,6 +197,7 @@ static int iproc_sdhci_probe(struct udevice *dev)
                                   "clock-freq-min-max", f_min_max, 2);
        if (ret) {
                printf("sdhci: clock-freq-min-max not found\n");
+               free(iproc_host);
                return ret;
        }
        host->max_clk = f_min_max[1];
@@ -212,8 +212,10 @@ static int iproc_sdhci_probe(struct udevice *dev)
 
        ret = sdhci_setup_cfg(&plat->cfg, &iproc_host->host,
                              f_min_max[1], f_min_max[0]);
-       if (ret)
+       if (ret) {
+               free(iproc_host);
                return ret;
+       }
 
        iproc_host->host.mmc = &plat->mmc;
        iproc_host->host.mmc->dev = dev;