[PATCH] arm64/crashdump-arm64: Fix makedumpfile error caused by fail to get _text address

Chen Wandun chenwandun1 at gmail.com
Fri Sep 19 00:35:22 PDT 2025


I encountered the following error while makedumpfile without enableing
kernel CONFIG_PROC_KCORE and CONFIG_KALLSYMS_ALL, this error only exists
before commit 29fe506 (kexec: make -a the default), this commit change
from kexec_load to kexec_file_load.

read_from_vmcore: Can't seek the dump memory(/proc/vmcore). (offset: ffff800084f4c000) Invalid argument
readpage_elf: Can't read the dump memory(/proc/vmcore).
readmem: type_addr: 1, addr:41f29800, size:8
vaddr_to_paddr_arm64: Can't read pgd
readmem: Can't convert a virtual address(ffff800082edf8a0) to physical address.
readmem: type_addr: 0, addr:ffff800082edf8a0, size:390
check_release: Can't get the address of system_utsname.

Although several error messages appear when loading second kernel using kexec without
kernel CONFIG_PROC_KCORE and CONFIG_KALLSYMS_ALL, but kexec return 0.

Can't open (/proc/kcore).
Can't get the symbol of _text to calculate page_offset.
Can't get the symbol of _text to calculate page_offset.

If kexec unable to get the _text address, it will result in elf_info.kern_paddr_start
to be a large value, and also phdr->p_filesz/phdr->p_offset to be a large value, such as:

readelf -l /proc/vmcore
Program Headers:
  Type           Offset             VirtAddr           PhysAddr
                 FileSiz            MemSiz              Flags  Align
  NOTE           0x0000000000001000 0x0000000000000000 0x0000000000000000
                 0x0000000000001a44 0x0000000000001a44         0x4
  LOAD           0x0000000000003000 0xffffffffffffffff 0x00007fffc0200000
                 0xffff800083020000 0xffff800083020000  RWE    0x0
  LOAD           0xffff800083023000 0x0000000000000000 0x0000000040000000
                 0x00000001e6e00000 0x00000001e6e00000  RWE    0x0
  LOAD           0xffff800269e23000 0x00000001f6e00000 0x0000000236e00000
                 0x0000000009200000 0x0000000009200000  RWE    0x0

This patch avoiding makedumpfile failure by ending the kexec process and explicitly
notifying error.

Reported-by: Zhao Meijing <zhaomeijing at lixiang.com>
Signed-off-by: Chen Wandun <chenwandun at lixiang.com>
---
 kexec/arch/arm64/crashdump-arm64.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/kexec/arch/arm64/crashdump-arm64.c b/kexec/arch/arm64/crashdump-arm64.c
index 73cb611..8629610 100644
--- a/kexec/arch/arm64/crashdump-arm64.c
+++ b/kexec/arch/arm64/crashdump-arm64.c
@@ -94,9 +94,11 @@ static int iomem_range_callback(void *UNUSED(data), int UNUSED(nr),
 		 * For compatibility, deduce by comparing the gap "__init_begin - _stext"
 		 * and the res size of "Kernel code" in /proc/iomem
 		 */
-		if (kva_text_end - kva_stext == length)
+		if (kva_text_end - kva_stext == length) {
+			if (!kva_text)
+				die("Cannot get kernel _text symbol address\n");
 			elf_info.kern_paddr_start = base - (kva_stext - kva_text);
-		else
+		} else
 			elf_info.kern_paddr_start = base;
 	}
 	else if (strncmp(str, KERNEL_DATA, strlen(KERNEL_DATA)) == 0)
-- 
2.25.1




More information about the kexec mailing list