summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAristo Chen <[email protected]>2026-06-05 15:42:50 +0000
committerTom Rini <[email protected]>2026-06-17 12:47:33 -0600
commitf42eac9dc8a8b8125920d8a18f7f64afedf1fbc5 (patch)
tree8a22fe3934b333aacf36675633106a55dc0adf20
parent914ebe8b16b40537c3b438bc213b738151018ec6 (diff)
bootm: increase kernel_noload decompression headroom from 4x to 8x
For a compressed kernel_noload image, bootm_load_os() allocates a buffer of ALIGN(image_len * 4, SZ_1M). The 4x factor is at the edge of what modern compressors (zstd, xz) achieve on real kernels, so a well-compressed vendor kernel can fail to boot at runtime with no intervening warning. Bump the headroom to 8x. The buffer is still bounded by the compressed image size, and the SZ_1M alignment keeps the overhead below 1 MiB on small kernels. Suggested-by: Simon Glass <[email protected]> Signed-off-by: Aristo Chen <[email protected]>
-rw-r--r--boot/bootm.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/boot/bootm.c b/boot/bootm.c
index d0656fbdf08..4c260a5f5ce 100644
--- a/boot/bootm.c
+++ b/boot/bootm.c
@@ -626,14 +626,14 @@ static int bootm_load_os(struct bootm_headers *images, int boot_progress)
/*
* 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.
+ * Allow up to 8x compression: this comfortably covers what zstd and xz
+ * achieve on real kernels, with headroom for well-compressed payloads.
* Use an alignment of 2MB since this might help arm64
*/
if (os.type == IH_TYPE_KERNEL_NOLOAD && os.comp != IH_COMP_NONE) {
phys_addr_t addr;
- decomp_len = ALIGN(image_len * 4, SZ_1M);
+ decomp_len = ALIGN(image_len * 8, SZ_1M);
err = lmb_alloc_mem(LMB_MEM_ALLOC_ANY, SZ_2M, &addr,
decomp_len, LMB_NONE);
if (err)