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: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Ray Jui <rjui@broadcom.com>
Fixes: 5fe225c105
("clk: iproc: add initial common clock support")
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
This commit is contained in:
Родитель
358bdf892f
Коммит
45a481c217
|
@ -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)
|
||||
|
|
Загрузка…
Ссылка в новой задаче