| From 2c3ee018eb25cf932783a66c664f3e2ac96f5473 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 13 Nov 2020 21:18:56 +0800 |
| Subject: MIPS: Alchemy: Fix memleak in alchemy_clk_setup_cpu |
| |
| From: Zhang Qilong <zhangqilong3@huawei.com> |
| |
| [ Upstream commit ac3b57adf87ad9bac7e33ca26bbbb13fae1ed62b ] |
| |
| If the clk_register fails, we should free h before |
| function returns to prevent memleak. |
| |
| Fixes: 474402291a0ad ("MIPS: Alchemy: clock framework integration of onchip clocks") |
| Reported-by: Hulk Robot <hulkci@huawei.com> |
| Signed-off-by: Zhang Qilong <zhangqilong3@huawei.com> |
| Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/mips/alchemy/common/clock.c | 9 ++++++++- |
| 1 file changed, 8 insertions(+), 1 deletion(-) |
| |
| diff --git a/arch/mips/alchemy/common/clock.c b/arch/mips/alchemy/common/clock.c |
| index d129475fd40de..4254ba13c5c51 100644 |
| --- a/arch/mips/alchemy/common/clock.c |
| +++ b/arch/mips/alchemy/common/clock.c |
| @@ -152,6 +152,7 @@ static struct clk __init *alchemy_clk_setup_cpu(const char *parent_name, |
| { |
| struct clk_init_data id; |
| struct clk_hw *h; |
| + struct clk *clk; |
| |
| h = kzalloc(sizeof(*h), GFP_KERNEL); |
| if (!h) |
| @@ -164,7 +165,13 @@ static struct clk __init *alchemy_clk_setup_cpu(const char *parent_name, |
| id.ops = &alchemy_clkops_cpu; |
| h->init = &id; |
| |
| - return clk_register(NULL, h); |
| + clk = clk_register(NULL, h); |
| + if (IS_ERR(clk)) { |
| + pr_err("failed to register clock\n"); |
| + kfree(h); |
| + } |
| + |
| + return clk; |
| } |
| |
| /* AUXPLLs ************************************************************/ |
| -- |
| 2.27.0 |
| |