[PATCH] dm: core: ofnode: safely fallback in ofnode_lookup_fdt
Caleb Connolly
caleb.connolly at linaro.org
Wed Nov 27 18:12:13 CET 2024
Hi Simon,
On 27/11/2024 17:52, Simon Glass wrote:
> 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.
What's the unexpected value? The only caller for this is ofnode_to_fdt()
and the return value for that is never checked. It seems clear to me
that in practise NULL is the unexpected value here.
> I think we should panic. Do you know what code path
> gets you here?
Hmm, I don't exactly recall. Should really have made a note when I wrote
this patch :/
Guess I'll drop this from my dev branch and come back when I figure this
out again.
>
> More work is needed in livetree to sort of the rough edges, sadly...
>
> Regards,
> Simon
--
// Caleb (they/them)
More information about the U-Boot
mailing list