[PATCH] dm: core: ofnode: safely fallback in ofnode_lookup_fdt

Simon Glass sjg at chromium.org
Wed Nov 27 17:52:24 CET 2024


Hi Caleb,

On Tue, 12 Nov 2024 at 22:21, Caleb Connolly <caleb.connolly at linaro.org> wrote:
>
> Under some conditions it's possible to hit the null condition here like
> when running with OF_LIVE and using the ofnode API before
> initr_of_live() is called. There is very little null
> checking for this in the FDT framework, so returning null here can
> result in weird null pointer conditions.
>
> Instead let's return the control FDT in the fallback case, this is
> usually what the user was expecting.
>
> Signed-off-by: Caleb Connolly <caleb.connolly at linaro.org>
> ---
>  drivers/core/ofnode.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c
> index 950895e72a99..7a7f25fc537c 100644
> --- a/drivers/core/ofnode.c
> +++ b/drivers/core/ofnode.c
> @@ -152,9 +152,9 @@ void *ofnode_lookup_fdt(ofnode node)
>                 uint i = OFTREE_TREE_ID(node.of_offset);
>
>                 if (i >= oftree_count) {
>                         log_debug("Invalid tree ID %x\n", i);
> -                       return NULL;
> +                       return (void *)gd->fdt_blob;
>                 }
>
>                 return oftree_list[i];
>         } else {
> --
> 2.47.0
>

Eek I really don't like that, since it will silently return an
unexpected value. I think we should panic. Do you know what code path
gets you here?

More work is needed in livetree to sort of the rough edges, sadly...

Regards,
Simon


More information about the U-Boot mailing list