diff options
author | Bosi Zhang <u201911157@hust.edu.cn> | 2023-04-22 10:43:31 +0200 |
---|---|---|
committer | Stephen Boyd <sboyd@kernel.org> | 2023-06-13 03:28:33 +0200 |
commit | 3db7285e044144fd88a356f5b641b9cd4b231a77 (patch) | |
tree | ef9e3a4756f02c7ea660f44e5514f8b4d6f36ddb /drivers/clk/mediatek | |
parent | clk: mediatek: reset: add infra_ao reset support for MT8188 (diff) | |
download | linux-3db7285e044144fd88a356f5b641b9cd4b231a77.tar.xz linux-3db7285e044144fd88a356f5b641b9cd4b231a77.zip |
clk: mediatek: fix of_iomap memory leak
Smatch reports:
drivers/clk/mediatek/clk-mtk.c:583 mtk_clk_simple_probe() warn:
'base' from of_iomap() not released on lines: 496.
This problem was also found in linux-next. In mtk_clk_simple_probe(),
base is not released when handling errors
if clk_data is not existed, which may cause a leak.
So free_base should be added here to release base.
Fixes: c58cd0e40ffa ("clk: mediatek: Add mtk_clk_simple_probe() to simplify clock providers")
Signed-off-by: Bosi Zhang <u201911157@hust.edu.cn>
Reviewed-by: Dongliang Mu <dzm91@hust.edu.cn>
Link: https://lore.kernel.org/r/20230422084331.47198-1-u201911157@hust.edu.cn
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
Diffstat (limited to 'drivers/clk/mediatek')
-rw-r--r-- | drivers/clk/mediatek/clk-mtk.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/clk/mediatek/clk-mtk.c b/drivers/clk/mediatek/clk-mtk.c index fd2214c3242f..3c50f48e93a7 100644 --- a/drivers/clk/mediatek/clk-mtk.c +++ b/drivers/clk/mediatek/clk-mtk.c @@ -500,8 +500,10 @@ static int __mtk_clk_simple_probe(struct platform_device *pdev, num_clks += mcd->num_mux_clks + mcd->num_divider_clks; clk_data = mtk_alloc_clk_data(num_clks); - if (!clk_data) - return -ENOMEM; + if (!clk_data) { + r = -ENOMEM; + goto free_base; + } if (mcd->fixed_clks) { r = mtk_clk_register_fixed_clks(mcd->fixed_clks, @@ -599,6 +601,7 @@ unregister_fixed_clks: mcd->num_fixed_clks, clk_data); free_data: mtk_free_clk_data(clk_data); +free_base: if (mcd->shared_io && base) iounmap(base); return r; |