summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorRasmus Villemoes <[email protected]>2025-08-19 12:55:54 +0200
committerTom Rini <[email protected]>2025-09-09 10:35:59 -0600
commit122c25c00a238b55ac6745eb961c5ea66b45be8c (patch)
tree96baa9aec16044efc347bb5d0c17c703d19e80e1 /common
parentaff7f1314a14ab2af5dbb04a33744c1c4db5aef7 (diff)
common/spl: use memmove() in load_simple_fit()
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 <[email protected]> Reviewed-by: Heinrich Schuchardt <[email protected]>
Diffstat (limited to 'common')
-rw-r--r--common/spl/spl_fit.c2
1 files changed, 1 insertions, 1 deletions
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) {