[U-Boot] [PATCH] drivers: mmc: Avoid memory leak in case of failure

From: Suniel Mahesh sunil.m@techveda.org
priv pointer should be freed before returning with an error value from exynos_dwmci_get_config().
Signed-off-by: Suniel Mahesh sunil.m@techveda.org Signed-off-by: Raghu Bharadwaj raghu@techveda.org --- drivers/mmc/exynos_dw_mmc.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/drivers/mmc/exynos_dw_mmc.c b/drivers/mmc/exynos_dw_mmc.c index 40f7892..84ef2da 100644 --- a/drivers/mmc/exynos_dw_mmc.c +++ b/drivers/mmc/exynos_dw_mmc.c @@ -168,6 +168,7 @@ static int exynos_dwmci_get_config(const void *blob, int node,
if (host->dev_index > 4) { printf("DWMMC%d: Can't get the dev index\n", host->dev_index); + free(priv); return -EINVAL; }
@@ -178,6 +179,7 @@ static int exynos_dwmci_get_config(const void *blob, int node, base = fdtdec_get_addr(blob, node, "reg"); if (!base) { printf("DWMMC%d: Can't get base address\n", host->dev_index); + free(priv); return -EINVAL; } host->ioaddr = (void *)base; @@ -187,6 +189,7 @@ static int exynos_dwmci_get_config(const void *blob, int node, if (err) { printf("DWMMC%d: Can't get sdr-timings for devider\n", host->dev_index); + free(priv); return -EINVAL; }

On 06/20/2017 01:53 AM, sunil.m@techveda.org wrote:
From: Suniel Mahesh sunil.m@techveda.org
priv pointer should be freed before returning with an error value from exynos_dwmci_get_config().
Signed-off-by: Suniel Mahesh sunil.m@techveda.org Signed-off-by: Raghu Bharadwaj raghu@techveda.org
Applied to u-boot-mmc.
Best Regards, Jaehoon Chung
drivers/mmc/exynos_dw_mmc.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/drivers/mmc/exynos_dw_mmc.c b/drivers/mmc/exynos_dw_mmc.c index 40f7892..84ef2da 100644 --- a/drivers/mmc/exynos_dw_mmc.c +++ b/drivers/mmc/exynos_dw_mmc.c @@ -168,6 +168,7 @@ static int exynos_dwmci_get_config(const void *blob, int node,
if (host->dev_index > 4) { printf("DWMMC%d: Can't get the dev index\n", host->dev_index);
return -EINVAL; }free(priv);
@@ -178,6 +179,7 @@ static int exynos_dwmci_get_config(const void *blob, int node, base = fdtdec_get_addr(blob, node, "reg"); if (!base) { printf("DWMMC%d: Can't get base address\n", host->dev_index);
return -EINVAL; } host->ioaddr = (void *)base;free(priv);
@@ -187,6 +189,7 @@ static int exynos_dwmci_get_config(const void *blob, int node, if (err) { printf("DWMMC%d: Can't get sdr-timings for devider\n", host->dev_index);
return -EINVAL; }free(priv);

On Monday 17 July 2017 04:38 PM, Jaehoon Chung wrote:
On 06/20/2017 01:53 AM, sunil.m@techveda.org wrote:
From: Suniel Mahesh sunil.m@techveda.org
priv pointer should be freed before returning with an error value from exynos_dwmci_get_config().
Signed-off-by: Suniel Mahesh sunil.m@techveda.org Signed-off-by: Raghu Bharadwaj raghu@techveda.org
Applied to u-boot-mmc.
Hi, It says the patch has been applied to u-boot-mmc git tree, but I couldn't find it there applied. http://git.denx.de/?p=u-boot/u-boot-mmc.git;a=summary
are there any issues with the patch or am I looking at the wrong place ?
Thanks suniel
Best Regards, Jaehoon Chung
drivers/mmc/exynos_dw_mmc.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/drivers/mmc/exynos_dw_mmc.c b/drivers/mmc/exynos_dw_mmc.c index 40f7892..84ef2da 100644 --- a/drivers/mmc/exynos_dw_mmc.c +++ b/drivers/mmc/exynos_dw_mmc.c @@ -168,6 +168,7 @@ static int exynos_dwmci_get_config(const void *blob, int node,
if (host->dev_index > 4) { printf("DWMMC%d: Can't get the dev index\n", host->dev_index);
return -EINVAL; }free(priv);
@@ -178,6 +179,7 @@ static int exynos_dwmci_get_config(const void *blob, int node, base = fdtdec_get_addr(blob, node, "reg"); if (!base) { printf("DWMMC%d: Can't get base address\n", host->dev_index);
return -EINVAL; } host->ioaddr = (void *)base;free(priv);
@@ -187,6 +189,7 @@ static int exynos_dwmci_get_config(const void *blob, int node, if (err) { printf("DWMMC%d: Can't get sdr-timings for devider\n", host->dev_index);
return -EINVAL; }free(priv);

On 08/04/2017 06:34 PM, Suniel Mahesh wrote:
On Monday 17 July 2017 04:38 PM, Jaehoon Chung wrote:
On 06/20/2017 01:53 AM, sunil.m@techveda.org wrote:
From: Suniel Mahesh sunil.m@techveda.org
priv pointer should be freed before returning with an error value from exynos_dwmci_get_config().
Signed-off-by: Suniel Mahesh sunil.m@techveda.org Signed-off-by: Raghu Bharadwaj raghu@techveda.org
Applied to u-boot-mmc.
Hi, It says the patch has been applied to u-boot-mmc git tree, but I couldn't find it there applied. http://git.denx.de/?p=u-boot/u-boot-mmc.git;a=summary
are there any issues with the patch or am I looking at the wrong place ?
Right place..Sorry..i missed it..when i rebased..will re-apply. Thanks for pointing out.
Best Regards, Jaehoon Chung
Thanks suniel
Best Regards, Jaehoon Chung
drivers/mmc/exynos_dw_mmc.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/drivers/mmc/exynos_dw_mmc.c b/drivers/mmc/exynos_dw_mmc.c index 40f7892..84ef2da 100644 --- a/drivers/mmc/exynos_dw_mmc.c +++ b/drivers/mmc/exynos_dw_mmc.c @@ -168,6 +168,7 @@ static int exynos_dwmci_get_config(const void *blob, int node,
if (host->dev_index > 4) { printf("DWMMC%d: Can't get the dev index\n", host->dev_index);
return -EINVAL; }free(priv);
@@ -178,6 +179,7 @@ static int exynos_dwmci_get_config(const void *blob, int node, base = fdtdec_get_addr(blob, node, "reg"); if (!base) { printf("DWMMC%d: Can't get base address\n", host->dev_index);
return -EINVAL; } host->ioaddr = (void *)base;free(priv);
@@ -187,6 +189,7 @@ static int exynos_dwmci_get_config(const void *blob, int node, if (err) { printf("DWMMC%d: Can't get sdr-timings for devider\n", host->dev_index);
return -EINVAL; }free(priv);

On Friday 18 August 2017 01:00 PM, Jaehoon Chung wrote:
On 08/04/2017 06:34 PM, Suniel Mahesh wrote:
On Monday 17 July 2017 04:38 PM, Jaehoon Chung wrote:
On 06/20/2017 01:53 AM, sunil.m@techveda.org wrote:
From: Suniel Mahesh sunil.m@techveda.org
priv pointer should be freed before returning with an error value from exynos_dwmci_get_config().
Signed-off-by: Suniel Mahesh sunil.m@techveda.org Signed-off-by: Raghu Bharadwaj raghu@techveda.org
Applied to u-boot-mmc.
Hi, It says the patch has been applied to u-boot-mmc git tree, but I couldn't find it there applied. http://git.denx.de/?p=u-boot/u-boot-mmc.git;a=summary
are there any issues with the patch or am I looking at the wrong place ?
Right place..Sorry..i missed it..when i rebased..will re-apply. Thanks for pointing out.
Hi, Just a reminder, please re-apply.
I am rebasing the patch w.r.t latest u-boot source tree and will shortly send it.
Thanks suniel
Best Regards, Jaehoon Chung
Thanks suniel
Best Regards, Jaehoon Chung
drivers/mmc/exynos_dw_mmc.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/drivers/mmc/exynos_dw_mmc.c b/drivers/mmc/exynos_dw_mmc.c index 40f7892..84ef2da 100644 --- a/drivers/mmc/exynos_dw_mmc.c +++ b/drivers/mmc/exynos_dw_mmc.c @@ -168,6 +168,7 @@ static int exynos_dwmci_get_config(const void *blob, int node,
if (host->dev_index > 4) { printf("DWMMC%d: Can't get the dev index\n", host->dev_index);
return -EINVAL; }free(priv);
@@ -178,6 +179,7 @@ static int exynos_dwmci_get_config(const void *blob, int node, base = fdtdec_get_addr(blob, node, "reg"); if (!base) { printf("DWMMC%d: Can't get base address\n", host->dev_index);
return -EINVAL; } host->ioaddr = (void *)base;free(priv);
@@ -187,6 +189,7 @@ static int exynos_dwmci_get_config(const void *blob, int node, if (err) { printf("DWMMC%d: Can't get sdr-timings for devider\n", host->dev_index);
return -EINVAL; }free(priv);

From: Suniel Mahesh sunil.m@techveda.org
priv pointer should be freed before returning with an error value from exynos_dwmci_get_config().
Signed-off-by: Suniel Mahesh sunil.m@techveda.org Signed-off-by: Raghu Bharadwaj raghu@techveda.org --- Changes for v2: - rebased on latest u-boot tree (2017.11.rc1) - patch was accepted long time ago, but not applied to u-boot-mmc, please apply. --- Note: Tested on latest u-boot mainline tree, no build issues. --- drivers/mmc/exynos_dw_mmc.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/drivers/mmc/exynos_dw_mmc.c b/drivers/mmc/exynos_dw_mmc.c index 40f7892..84ef2da 100644 --- a/drivers/mmc/exynos_dw_mmc.c +++ b/drivers/mmc/exynos_dw_mmc.c @@ -168,6 +168,7 @@ static int exynos_dwmci_get_config(const void *blob, int node,
if (host->dev_index > 4) { printf("DWMMC%d: Can't get the dev index\n", host->dev_index); + free(priv); return -EINVAL; }
@@ -178,6 +179,7 @@ static int exynos_dwmci_get_config(const void *blob, int node, base = fdtdec_get_addr(blob, node, "reg"); if (!base) { printf("DWMMC%d: Can't get base address\n", host->dev_index); + free(priv); return -EINVAL; } host->ioaddr = (void *)base; @@ -187,6 +189,7 @@ static int exynos_dwmci_get_config(const void *blob, int node, if (err) { printf("DWMMC%d: Can't get sdr-timings for devider\n", host->dev_index); + free(priv); return -EINVAL; }

On 10/05/2017 03:18 PM, sunil.m@techveda.org wrote:
From: Suniel Mahesh sunil.m@techveda.org
priv pointer should be freed before returning with an error value from exynos_dwmci_get_config().
Signed-off-by: Suniel Mahesh sunil.m@techveda.org Signed-off-by: Raghu Bharadwaj raghu@techveda.org
Applied to u-boot-mmc.
Best Regards, Jaehoon Chung
Changes for v2:
- rebased on latest u-boot tree (2017.11.rc1)
- patch was accepted long time ago, but not applied to u-boot-mmc, please apply.
Note: Tested on latest u-boot mainline tree, no build issues.
drivers/mmc/exynos_dw_mmc.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/drivers/mmc/exynos_dw_mmc.c b/drivers/mmc/exynos_dw_mmc.c index 40f7892..84ef2da 100644 --- a/drivers/mmc/exynos_dw_mmc.c +++ b/drivers/mmc/exynos_dw_mmc.c @@ -168,6 +168,7 @@ static int exynos_dwmci_get_config(const void *blob, int node,
if (host->dev_index > 4) { printf("DWMMC%d: Can't get the dev index\n", host->dev_index);
return -EINVAL; }free(priv);
@@ -178,6 +179,7 @@ static int exynos_dwmci_get_config(const void *blob, int node, base = fdtdec_get_addr(blob, node, "reg"); if (!base) { printf("DWMMC%d: Can't get base address\n", host->dev_index);
return -EINVAL; } host->ioaddr = (void *)base;free(priv);
@@ -187,6 +189,7 @@ static int exynos_dwmci_get_config(const void *blob, int node, if (err) { printf("DWMMC%d: Can't get sdr-timings for devider\n", host->dev_index);
return -EINVAL; }free(priv);
participants (3)
-
Jaehoon Chung
-
Suniel Mahesh
-
sunil.m@techveda.org