[openwrt/openwrt] kexec-tools: add patch to fix issue with appended DTB and zImage on ARM
LEDE Commits
lede-commits at lists.infradead.org
Sun May 23 06:23:58 PDT 2021
hauke pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/42cd06f7fe49668399a010db8f5d2100e45465a9
commit 42cd06f7fe49668399a010db8f5d2100e45465a9
Author: Alexander Egorenkov <egorenar-dev at posteo.net>
AuthorDate: Sat Apr 17 09:50:39 2021 +0200
kexec-tools: add patch to fix issue with appended DTB and zImage on ARM
This patch fixes a recently found problem when a zImage passed to
kexec-tools contains an appended DTB. In that case kexec boot fails because
the decompressor wrongly tries to use the non-existing appended DTB instaed
of the one passed in the register r2.
- http://lists.infradead.org/pipermail/kexec/2021-April/022353.html
Signed-off-by: Alexander Egorenkov <egorenar-dev at posteo.net>
---
package/boot/kexec-tools/Makefile | 2 +-
...copy-magic-4-bytes-of-appended-DTB-in-zIm.patch | 52 ++++++++++++++++++++++
2 files changed, 53 insertions(+), 1 deletion(-)
diff --git a/package/boot/kexec-tools/Makefile b/package/boot/kexec-tools/Makefile
index 36fe53671a..0fbbefdc3b 100644
--- a/package/boot/kexec-tools/Makefile
+++ b/package/boot/kexec-tools/Makefile
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=kexec-tools
PKG_VERSION:=2.0.21
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@KERNEL/linux/utils/kernel/kexec
diff --git a/package/boot/kexec-tools/patches/001-arm-do-not-copy-magic-4-bytes-of-appended-DTB-in-zIm.patch b/package/boot/kexec-tools/patches/001-arm-do-not-copy-magic-4-bytes-of-appended-DTB-in-zIm.patch
new file mode 100644
index 0000000000..82bdd4e7ed
--- /dev/null
+++ b/package/boot/kexec-tools/patches/001-arm-do-not-copy-magic-4-bytes-of-appended-DTB-in-zIm.patch
@@ -0,0 +1,52 @@
+From 9817ec81968a5eec7863902833fb77680544eae4 Mon Sep 17 00:00:00 2001
+From: Alexander Egorenkov <egorenar-dev at posteo.net>
+Date: Mon, 12 Apr 2021 13:18:05 +0200
+Subject: [PATCH 1/1] arm: do not copy magic 4 bytes of appended DTB in zImage
+
+If the passed zImage happens to have a DTB appended, then the magic 4 bytes
+of the DTB are copied together with the kernel image. This leads to
+failed kexec boots because the decompressor finds the aforementioned
+DTB magic and falsely tries to replace the DTB passed in the register r2
+with the non-existent appended one.
+
+Signed-off-by: Alexander Egorenkov <egorenar-dev at posteo.net>
+Signed-off-by: Simon Horman <horms at verge.net.au>
+---
+ kexec/arch/arm/kexec-zImage-arm.c | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+--- a/kexec/arch/arm/kexec-zImage-arm.c
++++ b/kexec/arch/arm/kexec-zImage-arm.c
+@@ -382,6 +382,7 @@ int zImage_arm_load(int argc, char **arg
+ unsigned int atag_offset = 0x1000; /* 4k offset from memory start */
+ unsigned int extra_size = 0x8000; /* TEXT_OFFSET */
+ const struct zimage_tag *tag;
++ size_t kernel_buf_size;
+ size_t kernel_mem_size;
+ const char *command_line;
+ char *modified_cmdline = NULL;
+@@ -538,6 +539,15 @@ int zImage_arm_load(int argc, char **arg
+ }
+
+ /*
++ * Save the length of the compressed kernel image w/o the appended DTB.
++ * This will be required later on when the kernel image contained
++ * in the zImage will be loaded into a kernel memory segment.
++ * And we want to load ONLY the compressed kernel image from the zImage
++ * and discard the appended DTB.
++ */
++ kernel_buf_size = len;
++
++ /*
+ * Always extend the zImage by four bytes to ensure that an appended
+ * DTB image always sees an initialised value after _edata.
+ */
+@@ -759,7 +769,7 @@ int zImage_arm_load(int argc, char **arg
+ add_segment(info, dtb_buf, dtb_length, dtb_offset, dtb_length);
+ }
+
+- add_segment(info, buf, len, kernel_base, kernel_mem_size);
++ add_segment(info, buf, kernel_buf_size, kernel_base, kernel_mem_size);
+
+ info->entry = (void*)kernel_base;
+
More information about the lede-commits
mailing list