[RESEND PATCH] clk: fix crash on clk_set_rate clean rate cache
Michael Nazzareno Trimarchi
michael at amarulasolutions.com
Sat Mar 15 10:41:00 CET 2025
Hi
On Sat, Mar 15, 2025 at 10:24 AM Christian Marangi <ansuelsmth at gmail.com>
wrote:
> It's currently possible to make the bootloader crash on calling
> clk_set_rate caused by the loop in clk_clean_rate_cache.
>
> The loop assume that every child of the clock node are also clock
> device but this is not always the case. For example it's common for a
> clock to bind to a reset device or also expose a syscon if the clock
> register map is also used to apply special configuration.
>
> In such case, on accessing a device as a clock, the bootloader crash. To
> correctly handle this, check if the child device is actually a clock and
> ignore otherwise.
>
> Fixes: 6b7fd3128f71 ("clk: fix set_rate to clean up cached rates for the
> hierarchy")
> Signed-off-by: Christian Marangi <ansuelsmth at gmail.com>
> ---
> RESEND as there was a problem with email To:
>
> drivers/clk/clk-uclass.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/drivers/clk/clk-uclass.c b/drivers/clk/clk-uclass.c
> index 353ae476068..8f3309d9530 100644
> --- a/drivers/clk/clk-uclass.c
> +++ b/drivers/clk/clk-uclass.c
> @@ -554,6 +554,9 @@ static void clk_clean_rate_cache(struct clk *clk)
> clk->rate = 0;
>
> list_for_each_entry(child_dev, &clk->dev->child_head,
> sibling_node) {
> + if (device_get_uclass_id(child_dev) != UCLASS_CLK)
> + continue;
> +
> clkp = dev_get_clk_ptr(child_dev);
> clk_clean_rate_cache(clkp);
> }
>
Reviewed-by: Michael Trimarchi <michael at amarulasolutions.com>
Michael
> --
> 2.48.1
>
>
--
Michael Nazzareno Trimarchi
Co-Founder & Chief Executive Officer
M. +39 347 913 2170
michael at amarulasolutions.com
__________________________________
Amarula Solutions BV
Joop Geesinkweg 125, 1114 AB, Amsterdam, NL
T. +31 (0)85 111 9172
info at amarulasolutions.com
www.amarulasolutions.com
More information about the U-Boot
mailing list