[PATCH 1/1] spl: spl_legacy: simplify spl_parse_legacy_validate
Marek Vasut
marex at denx.de
Sun Jul 23 18:06:32 CEST 2023
On 7/22/23 22:37, Heinrich Schuchardt wrote:
Hi,
>>> diff --git a/common/spl/spl_legacy.c b/common/spl/spl_legacy.c
>>> index 095443c63d..9246f555e3 100644
>>> --- a/common/spl/spl_legacy.c
>>> +++ b/common/spl/spl_legacy.c
>>> @@ -22,10 +22,7 @@ static void spl_parse_legacy_validate(uintptr_t
>>> start, uintptr_t size)
>>> uintptr_t spl_end = (uintptr_t)_image_binary_end;
>>> uintptr_t end = start + size;
>>> - if ((start >= spl_start && start < spl_end) ||
>>> - (end > spl_start && end <= spl_end) ||
>>> - (start < spl_start && end >= spl_end) ||
>>> - (start > end && end > spl_start))
>>> + if (end > spl_start && start < spl_end)
>>> panic("SPL: Image overlaps SPL\n");
>>> if (size > CONFIG_SYS_BOOTM_LEN)
>>
>> Does this handle address space wrap around ? This:
>>
>> =====blob=====|..............|=====blob=====
>> .....|==spl==|..............................
>>
>> Hint: it does not.
>
> The replaced code does not handle wrap around where end is below
> spl_start. The following code would cover all cases of image wrap around:
>
> + if (end > spl_start && start < spl_end
> + panic("SPL: Image overlaps SPL\n");
> + if (start >= end)
> + panic("SPL: Image wraps around\n");
>
> I guess we don't have to test for spl_start >= spl_end.
I would really like someone to double-check this piece of code.
>>
>> +CC Rasmus.
>>
>> Look at all the other checks in U-Boot which do, and first factor them
>
> Which other instances do you refer to?
See e.g. bootm_find_images() in boot/bootm.c .
Basically git grep -i overlap and it shows a few more sites.
> The lmb library does not to check for wrap around but the wrap around
> checks would have to be in other places than lmb_addrs_overlap().
I am kind-of tempted to suggest we should add LMB to SPL to fix this
properly, since that way LMB would cover all vital parts of U-Boot and
assure they won't be overwritten, not just code.
More information about the U-Boot
mailing list