aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/clk/bcm
diff options
context:
space:
mode:
authorRay Jui <rjui@broadcom.com>2015-06-29 17:30:09 -0400
committerStephen Boyd <sboyd@codeaurora.org>2015-07-02 12:50:26 -0400
commit45a481c2176f6acca2efb6477c6018b2c3e3c60f (patch)
treee1e873a19c6e582f1efe0a36fd7444584364c7e7 /drivers/clk/bcm
parent358bdf892f6bfacf20884b54a35ab038321f06f9 (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.c6
-rw-r--r--drivers/clk/bcm/clk-iproc-pll.c8
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
260err_clk_register: 256err_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
265err_iomap_gate: 261err_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
692err_clk_register: 688err_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
698err_pll_register: 692err_pll_register:
699 if (pll->asiu_base) 693 if (pll->asiu_base)