[PATCH] clk: mediatek: Fix memory leak on clock init fail

Subsystems: common clk framework, the rest

STALE3941d

2 messages, 2 authors, 2016-01-08 · open the first message on its own page

[PATCH] clk: mediatek: Fix memory leak on clock init fail

From: James Liao <hidden>
Date: 2016-01-08 08:16:10

mtk_clk_register_composite() may leak memory due to some error
handling path don't free all allocated memory. This patch
free all pointers that may allocate memory before error return.
And it's safe because kfree() can handle NULL pointers.

Signed-off-by: James Liao <redacted>
---
 drivers/clk/mediatek/clk-mtk.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/clk/mediatek/clk-mtk.c b/drivers/clk/mediatek/clk-mtk.c
index cf08db6..3528303 100644
--- a/drivers/clk/mediatek/clk-mtk.c
+++ b/drivers/clk/mediatek/clk-mtk.c
@@ -209,12 +209,14 @@ struct clk * __init mtk_clk_register_composite(const struct mtk_composite *mc,
 		mc->flags);
 
 	if (IS_ERR(clk)) {
-		kfree(gate);
-		kfree(mux);
+		ret = PTR_ERR(clk);
+		goto err_out;
 	}
 
 	return clk;
 err_out:
+	kfree(div);
+	kfree(gate);
 	kfree(mux);
 
 	return ERR_PTR(ret);
-- 
1.9.1

Re: [PATCH] clk: mediatek: Fix memory leak on clock init fail

From: Daniel Kurtz <hidden>
Date: 2016-01-08 08:21:41

On Fri, Jan 8, 2016 at 4:15 PM, James Liao [off-list ref] wrote:
mtk_clk_register_composite() may leak memory due to some error
handling path don't free all allocated memory. This patch
free all pointers that may allocate memory before error return.
And it's safe because kfree() can handle NULL pointers.

Signed-off-by: James Liao <redacted>
Reviewed-by: Daniel Kurtz <redacted>
quoted hunk
---
 drivers/clk/mediatek/clk-mtk.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/clk/mediatek/clk-mtk.c b/drivers/clk/mediatek/clk-mtk.c
index cf08db6..3528303 100644
--- a/drivers/clk/mediatek/clk-mtk.c
+++ b/drivers/clk/mediatek/clk-mtk.c
@@ -209,12 +209,14 @@ struct clk * __init mtk_clk_register_composite(const struct mtk_composite *mc,
                mc->flags);

        if (IS_ERR(clk)) {
-               kfree(gate);
-               kfree(mux);
+               ret = PTR_ERR(clk);
+               goto err_out;
        }

        return clk;
 err_out:
+       kfree(div);
+       kfree(gate);
        kfree(mux);

        return ERR_PTR(ret);
--
1.9.1
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help