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

Reply via email to