[PATCH] lib: utils/fdt: Allow zero length mtime when parsing ACLINT

Inochi Amaoto inochiama at outlook.com
Thu Oct 12 01:23:48 PDT 2023


>在 2023-10-12星期四的 07:25 +0800,Inochi Amaoto写道:
>> Currently, the fdt_parse_aclint_node() does not allow the first reg to
>> be zero length. This may cause the parser to fail when the ACLINT does
>> not support mtime.
>>
>> To be robust, delay the check of first reg in fdt_parse_aclint_node()
>> so the parser can handle ACLINT without mtime support.
>>
>> Signed-off-by: Inochi Amaoto <inochiama at outlook.com>
>> ---
>>  lib/utils/fdt/fdt_helper.c | 6 +++++-
>>  1 file changed, 5 insertions(+), 1 deletion(-)
>>
>> diff --git a/lib/utils/fdt/fdt_helper.c b/lib/utils/fdt/fdt_helper.c
>> index c97f09d..6b4ef38 100644
>> --- a/lib/utils/fdt/fdt_helper.c
>> +++ b/lib/utils/fdt/fdt_helper.c
>> @@ -897,8 +897,10 @@ int fdt_parse_aclint_node(void *fdt, int nodeoffset, bool for_timer,
>>
>>  	rc = fdt_get_node_addr_size(fdt, nodeoffset, 0,
>>  				    &reg_addr, &reg_size);
>> -	if (rc < 0 || !reg_size)
>> +	if (rc < 0)
>>  		return SBI_ENODEV;
>> +	if (!reg_size)
>> +		reg_addr = reg_size = 0;
>If abandon checking reg_size here, should add a check where this function
>is called. Because reg_size=0 is only legal under without_mtime.
>

This check is not abandoned, but delayed.

>Regards,
>Xiang W
>>  	*out_addr1 = reg_addr;
>>  	*out_size1 = reg_size;
>>
>> @@ -906,6 +908,8 @@ int fdt_parse_aclint_node(void *fdt, int nodeoffset, bool for_timer,
>>  				    &reg_addr, &reg_size);
>>  	if (rc < 0 || !reg_size)
>>  		reg_addr = reg_size = 0;
>> +	if (!reg_addr && *out_size1 == 0)
>> +		return SBI_ENODEV;
>

The reg_size of the first pair is checked here.
It seems I should check reg_size here, will fix.

>>  	if (out_addr2)
>>  		*out_addr2 = reg_addr;
>>  	if (out_size2)
>> --
>> 2.42.0
>>
>>
>
>



More information about the opensbi mailing list