mirror of
https://github.com/torvalds/linux.git
synced 2026-11-06 21:58:01 +01:00
clocksource/drivers/fttmr010: Fix clk reference leak in error paths
fttmr010_common_init() obtains the PCLK reference with
of_clk_get_by_name() but never calls clk_put(). If clk_prepare_enable()
fails the reference is leaked directly, and every error path that jumps
to out_disable_clock only calls clk_disable_unprepare(), which releases
the prepare/enable state but not the reference obtained from
of_clk_get_by_name().
Add clk_put() to the clk_prepare_enable() failure path and to the
out_disable_clock label so the clock reference is no longer leaked. The
success path keeps PCLK enabled for the lifetime of the timer and is
left untouched.
Fixes: dd98442e17 ("clocksource/drivers/fttmr010: Drop Gemini specifics")
Cc: stable@vger.kernel.org
Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>
Signed-off-by: Daniel Lezcano <daniel.lezcano@kernel.org>
Reviewed-by: Linus Walleij <linusw@kernel.org>
Link: https://patch.msgid.link/20260915045426.1726805-1-vulab@iscas.ac.cn
This commit is contained in:
parent
8f30b035a6
commit
277e565723
|
|
@ -292,6 +292,7 @@ static int __init fttmr010_common_init(struct device_node *np,
|
|||
ret = clk_prepare_enable(clk);
|
||||
if (ret) {
|
||||
pr_err("failed to enable PCLK\n");
|
||||
clk_put(clk);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -432,6 +433,7 @@ static int __init fttmr010_common_init(struct device_node *np,
|
|||
kfree(fttmr010);
|
||||
out_disable_clock:
|
||||
clk_disable_unprepare(clk);
|
||||
clk_put(clk);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user