[PATCH] clocksource/drivers/timer-econet-en751221: Fix clock reference leak

Wentao Liang posted 1 patch 1 week, 3 days ago
drivers/clocksource/timer-econet-en751221.c | 1 +
1 file changed, 1 insertion(+)
[PATCH] clocksource/drivers/timer-econet-en751221: Fix clock reference leak
Posted by Wentao Liang 1 week, 3 days ago
timer_init() obtains the timer clock with of_clk_get() and only reads
its frequency with clk_get_rate(); the clock is never prepared nor
enabled. All four return paths after the acquisition (of_iomap()
failure, clocksource_mmio_init() failure, cevt_init() failure and
success) return without clk_put(), leaking the consumer reference.

Drop the reference with clk_put() right after the frequency has been
read. The clock enable state is untouched.

Fixes: 3b4c33ac87d0 ("clocksource/drivers: Add EcoNet Timer HPT driver")
Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>
---
 drivers/clocksource/timer-econet-en751221.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/clocksource/timer-econet-en751221.c b/drivers/clocksource/timer-econet-en751221.c
index 4008076b1a21..1859335345b5 100644
--- a/drivers/clocksource/timer-econet-en751221.c
+++ b/drivers/clocksource/timer-econet-en751221.c
@@ -181,6 +181,7 @@ static int __init timer_init(struct device_node *np)
 	}
 
 	econet_timer.freq_hz = clk_get_rate(clk);
+	clk_put(clk);
 
 	for (int i = 0; i < num_blocks; i++) {
 		econet_timer.membase[i] = of_iomap(np, i);
-- 
2.34.1
Re: [PATCH] clocksource/drivers/timer-econet-en751221: Fix clock reference leak
Posted by Caleb James DeLisle 1 week, 2 days ago
On 15/09/2026 07:45, Wentao Liang wrote:
> timer_init() obtains the timer clock with of_clk_get() and only reads
> its frequency with clk_get_rate(); the clock is never prepared nor
> enabled. All four return paths after the acquisition (of_iomap()
> failure, clocksource_mmio_init() failure, cevt_init() failure and
> success) return without clk_put(), leaking the consumer reference.
>
> Drop the reference with clk_put() right after the frequency has been
> read. The clock enable state is untouched.
>
> Fixes: 3b4c33ac87d0 ("clocksource/drivers: Add EcoNet Timer HPT driver")
> Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>


Tested-by: Caleb James DeLisle <cjd@cjdns.fr>


> ---
>   drivers/clocksource/timer-econet-en751221.c | 1 +
>   1 file changed, 1 insertion(+)
>
> diff --git a/drivers/clocksource/timer-econet-en751221.c b/drivers/clocksource/timer-econet-en751221.c
> index 4008076b1a21..1859335345b5 100644
> --- a/drivers/clocksource/timer-econet-en751221.c
> +++ b/drivers/clocksource/timer-econet-en751221.c
> @@ -181,6 +181,7 @@ static int __init timer_init(struct device_node *np)
>   	}
>   
>   	econet_timer.freq_hz = clk_get_rate(clk);
> +	clk_put(clk);
>   
>   	for (int i = 0; i < num_blocks; i++) {
>   		econet_timer.membase[i] = of_iomap(np, i);