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 <felipe...@gmail.com>
Acked-by: Sören Brinkmann <soren.brinkm...@xilinx.com>
---
 drivers/clk/zynq/clkc.c |   16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/drivers/clk/zynq/clkc.c b/drivers/clk/zynq/clkc.c
index cc40fe6..10772aa 100644
--- a/drivers/clk/zynq/clkc.c
+++ b/drivers/clk/zynq/clkc.c
@@ -117,13 +117,19 @@ static void __init zynq_clk_register_fclk(enum zynq_clk 
fclk,
                goto err;
        fclk_gate_lock = kmalloc(sizeof(*fclk_gate_lock), GFP_KERNEL);
        if (!fclk_gate_lock)
-               goto err;
+               goto err_fclk_gate_lock;
        spin_lock_init(fclk_lock);
        spin_lock_init(fclk_gate_lock);

        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);
+       if (!div0_name)
+               goto err_div0_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_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;

+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:
        clks[fclk] = ERR_PTR(-ENOMEM);
 }
--
1.7.10.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to