提交 45a481c2 编写于 作者: R Ray Jui 提交者: Stephen Boyd

clk: iproc: fix memory leak from clock name

of_property_read_string_index takes array of pointers and assign them to
strings read from device tree property. No additional memory allocation
is needed prior to calling of_property_read_string_index. In fact, since
the array of pointers will be re-assigned to other strings, any memory
that it points to prior to calling of_property_read_string_index will be
leaked
Reported-by: NDan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: NRay Jui <rjui@broadcom.com>
Fixes: 5fe225c1 ("clk: iproc: add initial common clock support")
Signed-off-by: NStephen Boyd <sboyd@codeaurora.org>
上级 358bdf89
......@@ -222,10 +222,6 @@ void __init iproc_asiu_setup(struct device_node *node,
struct iproc_asiu_clk *asiu_clk;
const char *clk_name;
clk_name = kzalloc(IPROC_CLK_NAME_LEN, GFP_KERNEL);
if (WARN_ON(!clk_name))
goto err_clk_register;
ret = of_property_read_string_index(node, "clock-output-names",
i, &clk_name);
if (WARN_ON(ret))
......@@ -259,7 +255,7 @@ void __init iproc_asiu_setup(struct device_node *node,
err_clk_register:
for (i = 0; i < num_clks; i++)
kfree(asiu->clks[i].name);
clk_unregister(asiu->clk_data.clks[i]);
iounmap(asiu->gate_base);
err_iomap_gate:
......
......@@ -655,10 +655,6 @@ void __init iproc_pll_clk_setup(struct device_node *node,
memset(&init, 0, sizeof(init));
parent_name = node->name;
clk_name = kzalloc(IPROC_CLK_NAME_LEN, GFP_KERNEL);
if (WARN_ON(!clk_name))
goto err_clk_register;
ret = of_property_read_string_index(node, "clock-output-names",
i, &clk_name);
if (WARN_ON(ret))
......@@ -690,10 +686,8 @@ void __init iproc_pll_clk_setup(struct device_node *node,
return;
err_clk_register:
for (i = 0; i < num_clks; i++) {
kfree(pll->clks[i].name);
for (i = 0; i < num_clks; i++)
clk_unregister(pll->clk_data.clks[i]);
}
err_pll_register:
if (pll->asiu_base)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册