From abd6e0f252ee17b18e98be69d87aaca6a26e8336 Mon Sep 17 00:00:00 2001 From: Tom Rini Date: Tue, 2 Dec 2025 15:20:33 -0600 Subject: [PATCH] boot/image-fit.c: Use aligned_alloc(...) not memalign(...) With the changes in commit 8fbcc0e0e839 ("boot: Assure FDT is always at 8-byte aligned address") to call memalign(...) we now always call memalign(...) rather than malloc(...) when allocating a buffer that may contain a device tree. However, memalign(...) is not portable among all of the host OSes we support. The C11 standard does require that aligned_alloc(...) exist and it takes the same parameters as memalign(...) does. Change this file to call aligned_alloc rather than memalign, and for the non-USE_HOSTCC case define that function back to memalign. Fixes: 8fbcc0e0e839 ("boot: Assure FDT is always at 8-byte aligned address") Suggested-by: Heinrich Schuchardt Signed-off-by: Tom Rini --- boot/image-fit.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/boot/image-fit.c b/boot/image-fit.c index cccaa48f683..fce3a320eac 100644 --- a/boot/image-fit.c +++ b/boot/image-fit.c @@ -16,6 +16,9 @@ #include #include #include + +/* C11 standard function for aligned allocations */ +extern void *aligned_alloc(size_t alignment, size_t size); #else #include #include @@ -23,19 +26,21 @@ #include #include #include +#include #include #include #ifdef CONFIG_DM_HASH #include #include #endif +#define aligned_alloc(a, s) memalign((a), (s)) + DECLARE_GLOBAL_DATA_PTR; #endif /* !USE_HOSTCC*/ #include #include #include -#include #include #include @@ -2279,7 +2284,7 @@ int fit_image_load(struct bootm_headers *images, ulong addr, log_debug("decompressing image\n"); if (load == data) { - loadbuf = memalign(8, max_decomp_len); + loadbuf = aligned_alloc(8, max_decomp_len); load = map_to_sysmem(loadbuf); } else { loadbuf = map_sysmem(load, max_decomp_len); @@ -2293,7 +2298,7 @@ int fit_image_load(struct bootm_headers *images, ulong addr, len = load_end - load; } else if (load_op != FIT_LOAD_IGNORED && image_type == IH_TYPE_FLATDT && ((uintptr_t)buf & 7)) { - loadbuf = memalign(8, len); + loadbuf = aligned_alloc(8, len); load = map_to_sysmem(loadbuf); memcpy(loadbuf, buf, len); } else if (load != data) { -- 2.47.3