[PATCH] common/spl: use memmove() in load_simple_fit()

Heinrich Schuchardt xypron.glpk at gmx.de
Tue Aug 19 13:02:36 CEST 2025


On 19.08.25 12:55, Rasmus Villemoes wrote:
> I had trouble booting some am335x boards (both
> beagleboneblack and a custom board). SPL would start just fine, and
> apparently load U-Boot proper, but it would hang when jumping to
> U-Boot.
> 
> While debugging, I stumbled on this memcpy() which from code
> inspection very much looked to have overlapping src and dst, and
> indeed a simple printf revealed
> 
>    calling memcpy(0x8087bf68, 0x8087bf80, 0xf7f8)
> 
> Now, it will always be with src > dst, our memcpy()
> implementations "most likely" do forward-copying, and in the end it
> turned out that this wasn't the culprit after all [*].
> 
> But to avoid me or others barking up the wrong tree in the future, and
> because this use of memcpy() is technically undefined, use memmove()
> instead.
> 
> [*] That was 358d1cc232c ("spl: Align FDT load address"), which has
> since been fixed in master but not the v2025.07 I worked of by
> 52caad0d14a ("ARM: Align image end to 8 bytes to fit DT alignment").
> 
> Signed-off-by: Rasmus Villemoes <ravi at prevas.dk>
> ---
>   common/spl/spl_fit.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c
> index 25f3c822a49..746c3d2fa28 100644
> --- a/common/spl/spl_fit.c
> +++ b/common/spl/spl_fit.c
> @@ -353,7 +353,7 @@ static int load_simple_fit(struct spl_load_info *info, ulong fit_offset,
>   		}
>   		length = loadEnd - CONFIG_SYS_LOAD_ADDR;
>   	} else {
> -		memcpy(load_ptr, src, length);
> +		memmove(load_ptr, src, length);
>   	}
>   
>   	if (image_info) {


Reviewed-by: Heinrich Schuchardt <heinrich.schuchardt at gmx.de>


More information about the U-Boot mailing list