Linux-ARM-Kernel Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] clk: at91: fix device node reference leak in at91sam9x5_sckc_register()
@ 2026-10-08 16:30 Haotian Zhang
  2026-10-09  6:11 ` Krzysztof Kozlowski
  0 siblings, 1 reply; 2+ messages in thread
From: Haotian Zhang @ 2026-10-08 16:30 UTC (permalink / raw)
  To: Stephen Boyd, Brian Masney, Jerome Brunet, Nicolas Ferre,
	Alexandre Belloni, Claudiu Beznea
  Cc: linux-clk, linux-arm-kernel, linux-kernel

at91sam9x5_sckc_register() calls of_get_compatible_child() to look up the
"atmel,at91sam9x5-clk-slow-osc" and "atmel,at91sam9x5-clk-slow" legacy
child nodes during DT backward compatibility handling. Both calls return a
device node with its reference count incremented, but neither reference is
ever dropped: the first is simply overwritten when the second lookup
reassigns child, and the second is leaked on every return path, including
the unregister_slow_* cleanup labels. of_clk_add_hw_provider() takes its
own reference and does not consume the caller's.

Drop the slow-osc reference once it has been used and release the remaining
child reference on both the success and error paths.

Fixes: 45b5ec8498ff ("clk: at91: modernize sckc binding")
Assisted-by: DeepSeek-V4.1-Flash
Signed-off-by: Haotian Zhang <vulab@iscas.ac.cn>
---
 drivers/clk/at91/sckc.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/clk/at91/sckc.c b/drivers/clk/at91/sckc.c
index 776118f14867..bdf6897a98e3 100644
--- a/drivers/clk/at91/sckc.c
+++ b/drivers/clk/at91/sckc.c
@@ -398,8 +398,9 @@ static void __init at91sam9x5_sckc_register(struct device_node *np,
 
 		xtal_name = of_clk_get_parent_name(child, 0);
 		bypass = of_property_read_bool(child, "atmel,osc-bypass");
+		of_node_put(child);
 
-		child =  of_get_compatible_child(np, "atmel,at91sam9x5-clk-slow");
+		child = of_get_compatible_child(np, "atmel,at91sam9x5-clk-slow");
 	} else {
 		bypass = of_property_read_bool(np, "atmel,osc-bypass");
 	}
@@ -431,6 +432,7 @@ static void __init at91sam9x5_sckc_register(struct device_node *np,
 	if (WARN_ON(ret))
 		goto unregister_slowck;
 
+	of_node_put(child);
 	return;
 
 unregister_slowck:
@@ -439,6 +441,7 @@ static void __init at91sam9x5_sckc_register(struct device_node *np,
 	at91_clk_unregister_slow_osc(slow_osc);
 unregister_slow_rc:
 	at91_clk_unregister_slow_rc_osc(slow_rc);
+	of_node_put(child);
 }
 
 static const struct clk_slow_bits at91sam9x5_bits = {
-- 
2.25.1



^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-10-09  6:11 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-08 16:30 [PATCH] clk: at91: fix device node reference leak in at91sam9x5_sckc_register() Haotian Zhang
2026-10-09  6:11 ` Krzysztof Kozlowski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox