From 41decf17a9eb33c7de9a4e7b7c56ada79ebedfe6 Mon Sep 17 00:00:00 2001 From: Rocky Hao Date: Wed, 31 Jan 2018 17:27:09 +0800 Subject: [PATCH] soc: rockchip: pm_test: fix memleak bug Change-Id: If484e4e8d18b860c32fbd2389c59db971b212d80 Signed-off-by: Rocky Hao --- drivers/soc/rockchip/pm_test.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/soc/rockchip/pm_test.c b/drivers/soc/rockchip/pm_test.c index 4e268659ff94..db839d16f0ba 100644 --- a/drivers/soc/rockchip/pm_test.c +++ b/drivers/soc/rockchip/pm_test.c @@ -75,6 +75,9 @@ static struct clk *clk_get_by_name(const char *clk_name) int i; np = of_find_node_by_name(NULL, "clock-controller"); + if (!np) + return ERR_PTR(-ENODEV); + clkspec.np = np; clkspec.args_count = 1; for (i = 1; i < CLK_NR_CLKS; i++) { @@ -83,12 +86,18 @@ static struct clk *clk_get_by_name(const char *clk_name) if (IS_ERR_OR_NULL(clk)) continue; name = __clk_get_name(clk); - if (strlen(name) != strlen(clk_name)) + if (strlen(name) != strlen(clk_name)) { + clk_put(clk); continue; + } if (!strncmp(name, clk_name, strlen(clk_name))) break; + + clk_put(clk); } + of_node_put(np); + if (i == CLK_NR_CLKS) clk = NULL; @@ -141,6 +150,7 @@ static int clk_rate_rawset(const char *buf) ret = clk_set_rate(clk, rate); if (ret) { pr_err("set %s rate %d error\n", clk_name, ret); + clk_put(clk); return ret; }