Kexec Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH kexec-tools v3] arm-zImage: prepare for more malloc requirements of zstd
@ 2026-09-22 10:25 Andreas Kemnade
  2026-09-22 12:14 ` Tom Fitzhenry
  2026-10-05  8:59 ` Simon Horman
  0 siblings, 2 replies; 3+ messages in thread
From: Andreas Kemnade @ 2026-09-22 10:25 UTC (permalink / raw)
  To: Russell King, kexec, j.neuschaefer, Mike Rapoport, Pratyush Yadav,
	Tom Fitzhenry, Simon Horman, Andrew Morton, Baoquan He,
	Pasha Tatashin
  Cc: Andreas Kemnade

As there are plans for zstd in zImage for ARM, which requires more malloc
size fo, decompression, look at the header for the required size.

References:
https://lore.kernel.org/lkml/ZFDMRst2O+RJUYuu@shell.armlinux.org.uk/#t
https://lore.kernel.org/lkml/20260828-zstd2-v2-0-4d9ce7150877@kemnade.info/

Suggested-by: Russell King (Oracle) <linux@armlinux.org.uk>
Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
---
To: kexec@lists.infradead.org
To: Andrew Morton <akpm@linux-foundation.org>
To: Baoquan He <baoquan.he@linux.dev>
To: Mike Rapoport <rppt@kernel.org>
To: Pasha Tatashin <pasha.tatashin@soleen.com>
To: Pratyush Yadav <pratyush@kernel.org>
To: Simon Horman <horms@kernel.org>
Cc: Russell King <linux@armlinux.org.uk>
Cc: j.neuschaefer@gmx.net
---
Changes in v3:
- calculate zImage size requirement before the if (tag) to simplify code
- Link to v2: https://patch.msgid.link/20260912-malloc-fix-v2-1-eb0c3ca681cd@kemnade.info

Changes in v2:
- extract malloc size from zImage header
- Link to v1: https://patch.msgid.link/20260829094607.689485-1-andreas@kemnade.info
---
 kexec/arch/arm/kexec-zImage-arm.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/kexec/arch/arm/kexec-zImage-arm.c b/kexec/arch/arm/kexec-zImage-arm.c
index 8b474dd..6c3bf27 100644
--- a/kexec/arch/arm/kexec-zImage-arm.c
+++ b/kexec/arch/arm/kexec-zImage-arm.c
@@ -131,6 +131,8 @@ struct zimage_tag {
 		struct zimage_krnl_size {
 			uint32_t size_ptr;
 			uint32_t bss_size;
+			uint32_t text_offset;
+			uint32_t malloc_size;
 		} krnl_size;
 	} u;
 };
@@ -663,9 +665,15 @@ int zImage_arm_load(int argc, char **argv, const char *buf, off_t len,
 
 	/*
 	 * The zImage length does not include its stack (4k) or its
-	 * malloc space (64k).  Include this.
+	 * malloc space.
 	 */
-	len += 0x11000;
+	len += 0x1000;
+
+	/* include malloc space */
+	if (tag && le32_to_cpu(tag->hdr.size) >= 6)
+		len += le32_to_cpu(tag->u.krnl_size.malloc_size);
+	else
+		len += 0x10000;
 
 	dbgprintf("zImage requires 0x%08llx bytes\n", (unsigned long long)len);
 

---
base-commit: 43c5cba85ad23cc69c423527d9587c59b89fa437
change-id: 20260912-malloc-fix-31a13574cb84

Best regards,
--  
Andreas Kemnade <andreas@kemnade.info>



^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH kexec-tools v3] arm-zImage: prepare for more malloc requirements of zstd
  2026-09-22 10:25 [PATCH kexec-tools v3] arm-zImage: prepare for more malloc requirements of zstd Andreas Kemnade
@ 2026-09-22 12:14 ` Tom Fitzhenry
  2026-10-05  8:59 ` Simon Horman
  1 sibling, 0 replies; 3+ messages in thread
From: Tom Fitzhenry @ 2026-09-22 12:14 UTC (permalink / raw)
  To: Andreas Kemnade, Russell King, kexec, j.neuschaefer,
	Mike Rapoport, Pratyush Yadav, Tom Fitzhenry, Simon Horman,
	Andrew Morton, Baoquan He, Pasha Tatashin

I tested this in QEMU with kexec-tools at 43c5cba85ad2 plus this patch:

1. Against unmodified Linux 8d3ae59288f1 (gzip): kexec reads the
    64 KiB malloc size from the header and boots the second kernel via
    kexec -e without regression:

   # /bin/kexec-patched --debug -l /boot/zImage 
--initrd=/boot/tiny-initrd.cpio.gz --append="console=ttyAMA0 kexec_booted=1"
   [...]
   zImage size 0x1a3500, file size 0x1a3500
     offset 0x00007770 tag 0x5a534c4b size 24
   zImage requires 0x001b4500 bytes
   [...]

   $ printf "0x%x\n" $((0x001b4500 - 0x001a3500))
   0x11000  # 0x1000 (4 KiB stack) + 0x10000 (64 KiB malloc)

2. Against Linux 8d3ae59288f1 with the v2 ARM zstd series[1] applied:
    kexec reads the increased 128 KiB malloc size from the
    header and boots the second kernel via kexec -e:

   # /bin/kexec-patched --debug -l /boot/zImage 
--initrd=/boot/tiny-initrd.cpio.gz --append="console=ttyAMA0 kexec_booted=1"
   [...]
   zImage size 0x182548, file size 0x182548
     offset 0x00017370 tag 0x5a534c4b size 24
   zImage requires 0x001a3548 bytes
   [...]

   $ printf "0x%x\n" $((0x001a3548 - 0x00182548))
   0x21000  # 0x1000 (4 KiB stack) + 0x20000 (128 KiB malloc)

Thank you addressing my comments.

Reviewed-by: Tom Fitzhenry <tom@tom-fitzhenry.me.uk>
Tested-by: Tom Fitzhenry <tom@tom-fitzhenry.me.uk>

[1] 
https://lore.kernel.org/lkml/20260828-zstd2-v2-0-4d9ce7150877@kemnade.info/


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH kexec-tools v3] arm-zImage: prepare for more malloc requirements of zstd
  2026-09-22 10:25 [PATCH kexec-tools v3] arm-zImage: prepare for more malloc requirements of zstd Andreas Kemnade
  2026-09-22 12:14 ` Tom Fitzhenry
@ 2026-10-05  8:59 ` Simon Horman
  1 sibling, 0 replies; 3+ messages in thread
From: Simon Horman @ 2026-10-05  8:59 UTC (permalink / raw)
  To: Andreas Kemnade
  Cc: Russell King, kexec, j.neuschaefer, Mike Rapoport, Pratyush Yadav,
	Tom Fitzhenry, Andrew Morton, Baoquan He, Pasha Tatashin

On Tue, Sep 22, 2026 at 12:25:59PM +0200, Andreas Kemnade wrote:
> As there are plans for zstd in zImage for ARM, which requires more malloc
> size fo, decompression, look at the header for the required size.
> 
> References:
> https://lore.kernel.org/lkml/ZFDMRst2O+RJUYuu@shell.armlinux.org.uk/#t
> https://lore.kernel.org/lkml/20260828-zstd2-v2-0-4d9ce7150877@kemnade.info/
> 
> Suggested-by: Russell King (Oracle) <linux@armlinux.org.uk>
> Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
> ---
> To: kexec@lists.infradead.org
> To: Andrew Morton <akpm@linux-foundation.org>
> To: Baoquan He <baoquan.he@linux.dev>
> To: Mike Rapoport <rppt@kernel.org>
> To: Pasha Tatashin <pasha.tatashin@soleen.com>
> To: Pratyush Yadav <pratyush@kernel.org>
> To: Simon Horman <horms@kernel.org>
> Cc: Russell King <linux@armlinux.org.uk>
> Cc: j.neuschaefer@gmx.net
> ---
> Changes in v3:
> - calculate zImage size requirement before the if (tag) to simplify code
> - Link to v2: https://patch.msgid.link/20260912-malloc-fix-v2-1-eb0c3ca681cd@kemnade.info
> 
> Changes in v2:
> - extract malloc size from zImage header
> - Link to v1: https://patch.msgid.link/20260829094607.689485-1-andreas@kemnade.info

Thanks, and sorry for the delay.

I have applied this as:

[1] arm-zImage: prepare for more malloc requirements of zstd
    https://git.kernel.org/pub/scm/utils/kernel/kexec/kexec-tools.git/commit/?id=e128675241fa


This required a manual merge due to conflicts with the following,
which I had applied just beforehand.

[2] arm: use the zImage tag's real TEXT_OFFSET for kernel placement
    https://git.kernel.org/pub/scm/utils/kernel/kexec/kexec-tools.git/commit/?id=c1a526c87eb1

In particular:

a. The text_offset member no longer needs to be added to struct zimage_tag
   by [1] as it was added by [2].

b. There is some fuzz in the 2nd hunk of [2] as [1] adds some
   logic earlier on in zImage_arm_load().

FTR, the patch I applied is as follows.
If I've messed something up, please let me know.


From e128675241fa7777dcce613a2df191458c320f5b Mon Sep 17 00:00:00 2001
From: Andreas Kemnade <andreas@kemnade.info>
Date: Tue, 22 Sep 2026 12:25:59 +0200
Subject: [PATCH] arm-zImage: prepare for more malloc requirements of zstd

As there are plans for zstd in zImage for ARM, which requires more malloc
size fo, decompression, look at the header for the required size.

References:
https://lore.kernel.org/lkml/ZFDMRst2O+RJUYuu@shell.armlinux.org.uk/#t
https://lore.kernel.org/lkml/20260828-zstd2-v2-0-4d9ce7150877@kemnade.info/

Suggested-by: Russell King (Oracle) <linux@armlinux.org.uk>
Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
Reviewed-by: Tom Fitzhenry <tom@tom-fitzhenry.me.uk>
Tested-by: Tom Fitzhenry <tom@tom-fitzhenry.me.uk>
Signed-off-by: Simon Horman <horms@kernel.org>
---
 kexec/arch/arm/kexec-zImage-arm.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/kexec/arch/arm/kexec-zImage-arm.c b/kexec/arch/arm/kexec-zImage-arm.c
index 892fca0cf09c..b1ee6ca2158b 100644
--- a/kexec/arch/arm/kexec-zImage-arm.c
+++ b/kexec/arch/arm/kexec-zImage-arm.c
@@ -132,6 +132,7 @@ struct zimage_tag {
 			uint32_t size_ptr;
 			uint32_t bss_size;
 			uint32_t text_offset;
+			uint32_t malloc_size;
 		} krnl_size;
 	} u;
 };
@@ -679,9 +680,15 @@ int zImage_arm_load(int argc, char **argv, const char *buf, off_t len,
 
 	/*
 	 * The zImage length does not include its stack (4k) or its
-	 * malloc space (64k).  Include this.
+	 * malloc space.
 	 */
-	len += 0x11000;
+	len += 0x1000;
+
+	/* include malloc space */
+	if (tag && le32_to_cpu(tag->hdr.size) >= 6)
+		len += le32_to_cpu(tag->u.krnl_size.malloc_size);
+	else
+		len += 0x10000;
 
 	dbgprintf("zImage requires 0x%08llx bytes\n", (unsigned long long)len);
 
-- 
2.47.3




^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-10-05  8:59 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-22 10:25 [PATCH kexec-tools v3] arm-zImage: prepare for more malloc requirements of zstd Andreas Kemnade
2026-09-22 12:14 ` Tom Fitzhenry
2026-10-05  8:59 ` Simon Horman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox