clk/zynq: Fix possible memory leak
The zynq_clk_register_fclk function can leak memory (fclk_lock) when unable to alloc memory for fclk_gate_lock Signed-off-by: Felipe Pena <felipensp@gmail.com> Acked-by: Sören Brinkmann <soren.brinkmann@xilinx.com> Signed-off-by: Mike Turquette <mturquette@linaro.org>
This commit is contained in:
parent
6cfc229d6f
commit
f8fe36f608
1 changed files with 15 additions and 1 deletions
|
@ -117,13 +117,19 @@ static void __init zynq_clk_register_fclk(enum zynq_clk fclk,
|
||||||
goto err;
|
goto err;
|
||||||
fclk_gate_lock = kmalloc(sizeof(*fclk_gate_lock), GFP_KERNEL);
|
fclk_gate_lock = kmalloc(sizeof(*fclk_gate_lock), GFP_KERNEL);
|
||||||
if (!fclk_gate_lock)
|
if (!fclk_gate_lock)
|
||||||
goto err;
|
goto err_fclk_gate_lock;
|
||||||
spin_lock_init(fclk_lock);
|
spin_lock_init(fclk_lock);
|
||||||
spin_lock_init(fclk_gate_lock);
|
spin_lock_init(fclk_gate_lock);
|
||||||
|
|
||||||
mux_name = kasprintf(GFP_KERNEL, "%s_mux", clk_name);
|
mux_name = kasprintf(GFP_KERNEL, "%s_mux", clk_name);
|
||||||
|
if (!mux_name)
|
||||||
|
goto err_mux_name;
|
||||||
div0_name = kasprintf(GFP_KERNEL, "%s_div0", clk_name);
|
div0_name = kasprintf(GFP_KERNEL, "%s_div0", clk_name);
|
||||||
|
if (!div0_name)
|
||||||
|
goto err_div0_name;
|
||||||
div1_name = kasprintf(GFP_KERNEL, "%s_div1", clk_name);
|
div1_name = kasprintf(GFP_KERNEL, "%s_div1", clk_name);
|
||||||
|
if (!div1_name)
|
||||||
|
goto err_div1_name;
|
||||||
|
|
||||||
clk = clk_register_mux(NULL, mux_name, parents, 4,
|
clk = clk_register_mux(NULL, mux_name, parents, 4,
|
||||||
CLK_SET_RATE_NO_REPARENT, fclk_ctrl_reg, 4, 2, 0,
|
CLK_SET_RATE_NO_REPARENT, fclk_ctrl_reg, 4, 2, 0,
|
||||||
|
@ -147,6 +153,14 @@ static void __init zynq_clk_register_fclk(enum zynq_clk fclk,
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
err_div1_name:
|
||||||
|
kfree(div0_name);
|
||||||
|
err_div0_name:
|
||||||
|
kfree(mux_name);
|
||||||
|
err_mux_name:
|
||||||
|
kfree(fclk_gate_lock);
|
||||||
|
err_fclk_gate_lock:
|
||||||
|
kfree(fclk_lock);
|
||||||
err:
|
err:
|
||||||
clks[fclk] = ERR_PTR(-ENOMEM);
|
clks[fclk] = ERR_PTR(-ENOMEM);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue