| From c22eb6fb069d35f90129c3beab8d80f08daa2cea Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sat, 15 Jan 2022 19:30:59 +0100 |
| Subject: clk: mediatek: Fix memory leaks on probe |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: José Expósito <jose.exposito89@gmail.com> |
| |
| [ Upstream commit 7a688c91d3fd54c53e7a9edd6052cdae98dd99d8 ] |
| |
| Handle the error branches to free memory where required. |
| |
| Addresses-Coverity-ID: 1491825 ("Resource leak") |
| Signed-off-by: José Expósito <jose.exposito89@gmail.com> |
| Reviewed-by: Chen-Yu Tsai <wenst@chromium.org> |
| Link: https://lore.kernel.org/r/20220115183059.GA10809@elementary |
| Signed-off-by: Stephen Boyd <sboyd@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/clk/mediatek/clk-mt8192.c | 36 +++++++++++++++++++++++++------ |
| 1 file changed, 30 insertions(+), 6 deletions(-) |
| |
| diff --git a/drivers/clk/mediatek/clk-mt8192.c b/drivers/clk/mediatek/clk-mt8192.c |
| index cbc7c6dbe0f4..79ddb3cc0b98 100644 |
| --- a/drivers/clk/mediatek/clk-mt8192.c |
| +++ b/drivers/clk/mediatek/clk-mt8192.c |
| @@ -1236,9 +1236,17 @@ static int clk_mt8192_infra_probe(struct platform_device *pdev) |
| |
| r = mtk_clk_register_gates(node, infra_clks, ARRAY_SIZE(infra_clks), clk_data); |
| if (r) |
| - return r; |
| + goto free_clk_data; |
| + |
| + r = of_clk_add_provider(node, of_clk_src_onecell_get, clk_data); |
| + if (r) |
| + goto free_clk_data; |
| + |
| + return r; |
| |
| - return of_clk_add_provider(node, of_clk_src_onecell_get, clk_data); |
| +free_clk_data: |
| + mtk_free_clk_data(clk_data); |
| + return r; |
| } |
| |
| static int clk_mt8192_peri_probe(struct platform_device *pdev) |
| @@ -1253,9 +1261,17 @@ static int clk_mt8192_peri_probe(struct platform_device *pdev) |
| |
| r = mtk_clk_register_gates(node, peri_clks, ARRAY_SIZE(peri_clks), clk_data); |
| if (r) |
| - return r; |
| + goto free_clk_data; |
| + |
| + r = of_clk_add_provider(node, of_clk_src_onecell_get, clk_data); |
| + if (r) |
| + goto free_clk_data; |
| |
| - return of_clk_add_provider(node, of_clk_src_onecell_get, clk_data); |
| + return r; |
| + |
| +free_clk_data: |
| + mtk_free_clk_data(clk_data); |
| + return r; |
| } |
| |
| static int clk_mt8192_apmixed_probe(struct platform_device *pdev) |
| @@ -1271,9 +1287,17 @@ static int clk_mt8192_apmixed_probe(struct platform_device *pdev) |
| mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data); |
| r = mtk_clk_register_gates(node, apmixed_clks, ARRAY_SIZE(apmixed_clks), clk_data); |
| if (r) |
| - return r; |
| + goto free_clk_data; |
| |
| - return of_clk_add_provider(node, of_clk_src_onecell_get, clk_data); |
| + r = of_clk_add_provider(node, of_clk_src_onecell_get, clk_data); |
| + if (r) |
| + goto free_clk_data; |
| + |
| + return r; |
| + |
| +free_clk_data: |
| + mtk_free_clk_data(clk_data); |
| + return r; |
| } |
| |
| static const struct of_device_id of_match_clk_mt8192[] = { |
| -- |
| 2.35.1 |
| |