[PATCH 2/4] bootm: use CONFIG_SYS_BOOTM_LEN for IH_TYPE_KERNEL_NOLOAD decompression buffer

Nora Schiffer nora.schiffer at ew.tq-group.com
Wed Jun 10 11:01:23 CEST 2026


CONFIG_SYS_BOOTM_LEN is passed to image_decomp(), so the same should be
used for the buffer allocation. Deriving a buffer size from the
compressed size if not possible, as the compression ratio may be
arbitrarily high for data with many repititions (for example ranges of
0x00 or 0xff).

Fixes: 69544c4fd8b1 ("bootm: Support kernel_noload with compression")
Signed-off-by: Nora Schiffer <nora.schiffer at ew.tq-group.com>
---
 boot/bootm.c | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/boot/bootm.c b/boot/bootm.c
index 51d99a3385f..db29606021d 100644
--- a/boot/bootm.c
+++ b/boot/bootm.c
@@ -623,18 +623,15 @@ static int bootm_load_os(struct bootm_headers *images, int boot_progress)
 	int err;
 
 	/*
-	 * For a "noload" compressed kernel we need to allocate a buffer large
-	 * enough to decompress in to and use that as the load address now.
-	 * Assume that the kernel compression is at most a factor of 4 since
-	 * zstd almost achieves that.
+	 * For a "noload" compressed kernel we need to allocate a buffer of
+	 * size CONFIG_SYS_BOOTM_LEN and use that as the load address now.
 	 * Use an alignment of 2MB since this might help arm64
 	 */
 	if (os.type == IH_TYPE_KERNEL_NOLOAD && os.comp != IH_COMP_NONE) {
-		ulong req_size = ALIGN(image_len * 4, SZ_1M);
 		phys_addr_t addr;
 
 		err = lmb_alloc_mem(LMB_MEM_ALLOC_ANY, SZ_2M, &addr,
-				    req_size, LMB_NONE);
+				    CONFIG_SYS_BOOTM_LEN, LMB_NONE);
 		if (err)
 			return 1;
 
@@ -642,7 +639,7 @@ static int bootm_load_os(struct bootm_headers *images, int boot_progress)
 		images->os.load = (ulong)addr;
 		images->ep = (ulong)addr;
 		debug("Allocated %lx bytes at %lx for kernel (size %lx) decompression\n",
-		      req_size, load, image_len);
+		      (ulong)CONFIG_SYS_BOOTM_LEN, load, image_len);
 	}
 
 	load_buf = map_sysmem(load, 0);
-- 
TQ-Systems GmbH | Mühlstraße 2, Gut Delling | 82229 Seefeld, Germany
Amtsgericht München, HRB 105018
Geschäftsführer: Detlef Schneider, Rüdiger Stahl, Stefan Schneider
https://www.tq-group.com/



More information about the U-Boot mailing list