Skip to content

Commit eef8791

Browse files
sourabhjainsgregkh
authored andcommitted
powerpc/crash: fix backup region offset update to elfcorehdr
[ Upstream commit 789335c ] update_backup_region_phdr() in file_load_64.c iterates over all the program headers in the kdump kernel’s elfcorehdr and updates the p_offset of the program header whose physical address starts at 0. However, the loop logic is incorrect because the program header pointer is not updated during iteration. Since elfcorehdr typically contains PT_NOTE entries first, the PT_LOAD program header with physical address 0 is never reached. As a result, its p_offset is not updated to point to the backup region. Because of this behavior, the capture kernel exports the first 64 KB of the crashed kernel’s memory at offset 0, even though that memory actually lives in the backup region. When a crash happens, purgatory copies the first 64 KB of the crashed kernel’s memory into the backup region so the capture kernel can safely use it. This has not caused problems so far because the first 64 KB is usually identical in both the crashed and capture kernels. However, this is just an assumption and is not guaranteed to always hold true. Fix update_backup_region_phdr() to correctly update the p_offset of the program header with a starting physical address of 0 by correcting the logic used to iterate over the program headers. Fixes: cb350c1 ("powerpc/kexec_file: Prepare elfcore header for crashing kernel") Reviewed-by: Aditya Gupta <adityag@linux.ibm.com> Signed-off-by: Sourabh Jain <sourabhjain@linux.ibm.com> Reviewed-by: Hari Bathini <hbathini@linux.ibm.com> Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com> Link: https://patch.msgid.link/20260312083051.1935737-2-sourabhjain@linux.ibm.com Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent 50c6018 commit eef8791

1 file changed

Lines changed: 1 addition & 1 deletion

File tree

arch/powerpc/kexec/file_load_64.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,7 @@ static void update_backup_region_phdr(struct kimage *image, Elf64_Ehdr *ehdr)
391391
unsigned int i;
392392

393393
phdr = (Elf64_Phdr *)(ehdr + 1);
394-
for (i = 0; i < ehdr->e_phnum; i++) {
394+
for (i = 0; i < ehdr->e_phnum; i++, phdr++) {
395395
if (phdr->p_paddr == BACKUP_SRC_START) {
396396
phdr->p_offset = image->arch.backup_start;
397397
kexec_dprintk("Backup region offset updated to 0x%lx\n",

0 commit comments

Comments
 (0)