From: Dinh Nguyen <dinh.ngu...@intel.com> commit 31423994dd0df04b38022b47330146c8990891c8 from https://github.com/altera-opensource/linux-socfpga.git
Fix potential memory leaks in the Stratix10 clock driver by freeing the struct pointer for error conditions. Remove 'reg2' variable, which was unused. Signed-off-by: Dinh Nguyen <dinh.ngu...@intel.com> Signed-off-by: Meng Li <meng...@windriver.com> --- drivers/clk/socfpga/clk-gate-s10.c | 5 ++++- drivers/clk/socfpga/clk-periph-s10.c | 1 + drivers/clk/socfpga/clk-pll-s10.c | 11 +++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/drivers/clk/socfpga/clk-gate-s10.c b/drivers/clk/socfpga/clk-gate-s10.c index 55cbf5c..f02df91 100644 --- a/drivers/clk/socfpga/clk-gate-s10.c +++ b/drivers/clk/socfpga/clk-gate-s10.c @@ -185,6 +185,7 @@ static void __init __socfpga_gate_init(struct device_node *node, if (IS_ERR(socfpga_clk->sys_mgr_base_addr)) { pr_err("%s: failed to find altr,sys-mgr regmap!\n", __func__); + kfree(socfpga_clk); return; } } @@ -208,8 +209,10 @@ static void __init __socfpga_gate_init(struct device_node *node, return; } rc = of_clk_add_provider(node, of_clk_src_simple_get, clk); - if (WARN_ON(rc)) + if (WARN_ON(rc)) { + kfree(socfpga_clk); return; + } } void __init socfpga_s10_gate_init(struct device_node *node) diff --git a/drivers/clk/socfpga/clk-periph-s10.c b/drivers/clk/socfpga/clk-periph-s10.c index 3827a89..4dea3f9a 100644 --- a/drivers/clk/socfpga/clk-periph-s10.c +++ b/drivers/clk/socfpga/clk-periph-s10.c @@ -155,6 +155,7 @@ static __init void __socfpga_periph_init(struct device_node *node, err_clk: clk_unregister(clk); + kfree(periph_clk); } void __init socfpga_s10_periph_init(struct device_node *node) diff --git a/drivers/clk/socfpga/clk-pll-s10.c b/drivers/clk/socfpga/clk-pll-s10.c index 231c798..6b235ed 100644 --- a/drivers/clk/socfpga/clk-pll-s10.c +++ b/drivers/clk/socfpga/clk-pll-s10.c @@ -136,8 +136,19 @@ static struct clk * __init __socfpga_pll_init(struct device_node *node, kfree(pll_clk); return NULL; } + rc = of_clk_add_provider(node, of_clk_src_simple_get, clk); + if (rc < 0) { + pr_err("Could not register clock provider for node:%s\n", + clk_name); + goto err_clk; + } return clk; + +err_clk: + clk_unregister(clk); + kfree(pll_clk); + return NULL; } void __init socfpga_s10_pll_init(struct device_node *node) -- 1.7.9.5 -- _______________________________________________ linux-yocto mailing list linux-yocto@yoctoproject.org https://lists.yoctoproject.org/listinfo/linux-yocto