@@ -195,17 +195,17 @@ static void __init of_cpu_clk_setup(struct device_node *node)
for_each_of_cpu_node(dn) {
struct clk_init_data init;
struct clk *clk;
- char *clk_name = kzalloc(5, GFP_KERNEL);
+ char *clk_name;
int cpu, err;
- if (WARN_ON(!clk_name))
- goto bail_out;
-
err = of_property_read_u32(dn, "reg", &cpu);
if (WARN_ON(err))
goto bail_out;
- sprintf(clk_name, "cpu%d", cpu);
+ clk_name = kasprintf(GFP_KERNEL, "cpu%d", cpu);
+ if (WARN_ON(!clk_name)) {
+ goto bail_out;
+ }
cpuclk[cpu].parent_name = of_clk_get_parent_name(node, 0);
cpuclk[cpu].clk_name = clk_name;
If an error occurs in the for_each loop, clk_name must be freed. In order to do so, sightly rearrange the code: - move the allocation to simplify error handling - use kasprintf instead of kzalloc/sprintf to simplify code and avoid a magic number Fixes: ab8ba01b3fe5 ("clk: mvebu: add armada-370-xp CPU specific clocks") Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> --- The { } around the 1 line block after kasprintf is intentional and makes sense with 2/2 --- drivers/clk/mvebu/clk-cpu.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)