diff options
author | Ray Jui <rjui@broadcom.com> | 2015-06-29 17:30:09 -0400 |
---|---|---|
committer | Stephen Boyd <sboyd@codeaurora.org> | 2015-07-02 12:50:26 -0400 |
commit | 45a481c2176f6acca2efb6477c6018b2c3e3c60f (patch) | |
tree | e1e873a19c6e582f1efe0a36fd7444584364c7e7 /drivers/clk/bcm | |
parent | 358bdf892f6bfacf20884b54a35ab038321f06f9 (diff) |
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: 5fe225c105fd ("clk: iproc: add initial common clock support")
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
Diffstat (limited to 'drivers/clk/bcm')
-rw-r--r-- | drivers/clk/bcm/clk-iproc-asiu.c | 6 | ||||
-rw-r--r-- | drivers/clk/bcm/clk-iproc-pll.c | 8 |
2 files changed, 2 insertions, 12 deletions
diff --git a/drivers/clk/bcm/clk-iproc-asiu.c b/drivers/clk/bcm/clk-iproc-asiu.c index e19c09cd9645..f630e1bbdcfe 100644 --- a/drivers/clk/bcm/clk-iproc-asiu.c +++ b/drivers/clk/bcm/clk-iproc-asiu.c | |||
@@ -222,10 +222,6 @@ void __init iproc_asiu_setup(struct device_node *node, | |||
222 | struct iproc_asiu_clk *asiu_clk; | 222 | struct iproc_asiu_clk *asiu_clk; |
223 | const char *clk_name; | 223 | const char *clk_name; |
224 | 224 | ||
225 | clk_name = kzalloc(IPROC_CLK_NAME_LEN, GFP_KERNEL); | ||
226 | if (WARN_ON(!clk_name)) | ||
227 | goto err_clk_register; | ||
228 | |||
229 | ret = of_property_read_string_index(node, "clock-output-names", | 225 | ret = of_property_read_string_index(node, "clock-output-names", |
230 | i, &clk_name); | 226 | i, &clk_name); |
231 | if (WARN_ON(ret)) | 227 | if (WARN_ON(ret)) |
@@ -259,7 +255,7 @@ void __init iproc_asiu_setup(struct device_node *node, | |||
259 | 255 | ||
260 | err_clk_register: | 256 | err_clk_register: |
261 | for (i = 0; i < num_clks; i++) | 257 | for (i = 0; i < num_clks; i++) |
262 | kfree(asiu->clks[i].name); | 258 | clk_unregister(asiu->clk_data.clks[i]); |
263 | iounmap(asiu->gate_base); | 259 | iounmap(asiu->gate_base); |
264 | 260 | ||
265 | err_iomap_gate: | 261 | err_iomap_gate: |
diff --git a/drivers/clk/bcm/clk-iproc-pll.c b/drivers/clk/bcm/clk-iproc-pll.c index 46fb84bc2674..a8d971b820b0 100644 --- a/drivers/clk/bcm/clk-iproc-pll.c +++ b/drivers/clk/bcm/clk-iproc-pll.c | |||
@@ -655,10 +655,6 @@ void __init iproc_pll_clk_setup(struct device_node *node, | |||
655 | memset(&init, 0, sizeof(init)); | 655 | memset(&init, 0, sizeof(init)); |
656 | parent_name = node->name; | 656 | parent_name = node->name; |
657 | 657 | ||
658 | clk_name = kzalloc(IPROC_CLK_NAME_LEN, GFP_KERNEL); | ||
659 | if (WARN_ON(!clk_name)) | ||
660 | goto err_clk_register; | ||
661 | |||
662 | ret = of_property_read_string_index(node, "clock-output-names", | 658 | ret = of_property_read_string_index(node, "clock-output-names", |
663 | i, &clk_name); | 659 | i, &clk_name); |
664 | if (WARN_ON(ret)) | 660 | if (WARN_ON(ret)) |
@@ -690,10 +686,8 @@ void __init iproc_pll_clk_setup(struct device_node *node, | |||
690 | return; | 686 | return; |
691 | 687 | ||
692 | err_clk_register: | 688 | err_clk_register: |
693 | for (i = 0; i < num_clks; i++) { | 689 | for (i = 0; i < num_clks; i++) |
694 | kfree(pll->clks[i].name); | ||
695 | clk_unregister(pll->clk_data.clks[i]); | 690 | clk_unregister(pll->clk_data.clks[i]); |
696 | } | ||
697 | 691 | ||
698 | err_pll_register: | 692 | err_pll_register: |
699 | if (pll->asiu_base) | 693 | if (pll->asiu_base) |