From mboxrd@z Thu Jan 1 00:00:00 1970 From: skannan@codeaurora.org (Saravana Kannan) Date: Mon, 19 Mar 2012 20:38:25 -0700 Subject: [PATCH 1/2] clk: Fix error handling in fixed clock hardware type register fn In-Reply-To: References: Message-ID: <1332214706-675-1-git-send-email-skannan@codeaurora.org> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org If memory allocation for the parents array or the parent string fails, then fail the registration immediately instead of calling clk_register and hoping it fails there. Return -ENOMEM on failure. Signed-off-by: Saravana Kannan Cc: Mike Turquette Cc: Andrew Lunn Cc: Rob Herring Cc: Russell King Cc: Jeremy Kerr Cc: Thomas Gleixner Cc: Arnd Bergman Cc: Paul Walmsley Cc: Shawn Guo Cc: Sascha Hauer Cc: Jamie Iles Cc: Richard Zhao Cc: Saravana Kannan Cc: Magnus Damm Cc: Mark Brown Cc: Linus Walleij Cc: Stephen Boyd Cc: Amit Kucheria Cc: Deepak Saxena Cc: Grant Likely --- There are still some memory free issues when clk_register() fails, but I will fix it when I fixed the other register() fns to return ENOMEM of alloc failure instead of a NULL. drivers/clk/clk-fixed-rate.c | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/clk/clk-fixed-rate.c b/drivers/clk/clk-fixed-rate.c index 90c79fb..6423ae9 100644 --- a/drivers/clk/clk-fixed-rate.c +++ b/drivers/clk/clk-fixed-rate.c @@ -61,22 +61,26 @@ struct clk *clk_register_fixed_rate(struct device *dev, const char *name, parent_names = kmalloc(sizeof(char *), GFP_KERNEL); if (! parent_names) - goto out; + goto fail_ptr; len = sizeof(char) * strlen(parent_name); parent_names[0] = kmalloc(len, GFP_KERNEL); if (!parent_names[0]) - goto out; + goto fail_str; strncpy(parent_names[0], parent_name, len); } -out: return clk_register(dev, name, &clk_fixed_rate_ops, &fixed->hw, parent_names, (parent_name ? 1 : 0), flags); +fail_str: + kfree(parent_names); +fail_ptr: + kfree(fixed); + return ERR_PTR(-ENOMEM); } -- 1.7.8.3