diff options
| author | Cong Ding <dinggnu@gmail.com> | 2013-01-15 13:44:26 -0500 |
|---|---|---|
| committer | Jason Cooper <jason@lakedaemon.net> | 2013-01-22 20:06:52 -0500 |
| commit | d6f620a457aa4c5c2e8d1a079a1236216c445aba (patch) | |
| tree | 7706a80b981da28f3669a973484ebab8384a23f2 | |
| parent | 11d5993df2e1f65e3acfeb92a3febe88803b3e7f (diff) | |
clk: mvebu/clk-cpu.c: fix memory leakage
the variable cpuclk and clk_name should be properly freed when error happens.
Signed-off-by: Cong Ding <dinggnu@gmail.com>
Acked-by: Jason Cooper <jason@lakedaemon.net>
Acked-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
Acked-by: Mike Turquette <mturquette@linaro.org>
Signed-off-by: Jason Cooper <jason@lakedaemon.net>
| -rw-r--r-- | drivers/clk/mvebu/clk-cpu.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/clk/mvebu/clk-cpu.c b/drivers/clk/mvebu/clk-cpu.c index ff004578a119..9dd2551a0a41 100644 --- a/drivers/clk/mvebu/clk-cpu.c +++ b/drivers/clk/mvebu/clk-cpu.c | |||
| @@ -124,7 +124,7 @@ void __init of_cpu_clk_setup(struct device_node *node) | |||
| 124 | 124 | ||
| 125 | clks = kzalloc(ncpus * sizeof(*clks), GFP_KERNEL); | 125 | clks = kzalloc(ncpus * sizeof(*clks), GFP_KERNEL); |
| 126 | if (WARN_ON(!clks)) | 126 | if (WARN_ON(!clks)) |
| 127 | return; | 127 | goto clks_out; |
| 128 | 128 | ||
| 129 | for_each_node_by_type(dn, "cpu") { | 129 | for_each_node_by_type(dn, "cpu") { |
| 130 | struct clk_init_data init; | 130 | struct clk_init_data init; |
| @@ -134,11 +134,11 @@ void __init of_cpu_clk_setup(struct device_node *node) | |||
| 134 | int cpu, err; | 134 | int cpu, err; |
| 135 | 135 | ||
| 136 | if (WARN_ON(!clk_name)) | 136 | if (WARN_ON(!clk_name)) |
| 137 | return; | 137 | goto bail_out; |
| 138 | 138 | ||
| 139 | err = of_property_read_u32(dn, "reg", &cpu); | 139 | err = of_property_read_u32(dn, "reg", &cpu); |
| 140 | if (WARN_ON(err)) | 140 | if (WARN_ON(err)) |
| 141 | return; | 141 | goto bail_out; |
| 142 | 142 | ||
| 143 | sprintf(clk_name, "cpu%d", cpu); | 143 | sprintf(clk_name, "cpu%d", cpu); |
| 144 | parent_clk = of_clk_get(node, 0); | 144 | parent_clk = of_clk_get(node, 0); |
| @@ -167,6 +167,9 @@ void __init of_cpu_clk_setup(struct device_node *node) | |||
| 167 | return; | 167 | return; |
| 168 | bail_out: | 168 | bail_out: |
| 169 | kfree(clks); | 169 | kfree(clks); |
| 170 | while(ncpus--) | ||
| 171 | kfree(cpuclk[ncpus].clk_name); | ||
| 172 | clks_out: | ||
| 170 | kfree(cpuclk); | 173 | kfree(cpuclk); |
| 171 | } | 174 | } |
| 172 | 175 | ||
