All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Jinjie Ruan" <ruanjinjie@huawei.com>,
	catalin.marinas@arm.com, will@kernel.org, mark.rutland@arm.com,
	chenhuacai@kernel.org, kernel@xen0n.name, maddy@linux.ibm.com,
	mpe@ellerman.id.au, npiggin@gmail.com, chleroy@kernel.org,
	ritesh.list@gmail.com, sshegde@linux.ibm.com, pjw@kernel.org,
	palmer@dabbelt.com, aou@eecs.berkeley.edu, alex@ghiti.fr,
	tglx@kernel.org, mingo@redhat.com, bp@alien8.de,
	dave.hansen@linux.intel.com, hpa@zytor.com,
	akpm@linux-foundation.org, baoquan.he@linux.dev, rppt@kernel.org,
	pasha.tatashin@soleen.com, pratyush@kernel.org,
	leitao@debian.org, yeoreum.yun@arm.com, mpilaniy@redhat.com,
	robh@kernel.org, coiby.xu@gmail.com, Yeking@Red54.com,
	prudo@redhat.com, brads@mainlining.org,
	sourabhjain@linux.ibm.com, mkchauras@gmail.com, blum@kernel.org,
	adityag@linux.ibm.com, qirui.001@bytedance.com,
	hui.wang@canonical.com, sohammetha01@gmail.com,
	guoren@kernel.org, gaohan@iscas.ac.cn,
	ionut.nechita@windriver.com, vishal.l.verma@intel.com,
	seanjc@google.com, ardb@kernel. org, richard.lyu@suse.com,
	arnd@arndb.de, tzimmermann@suse.de, rick.p.edgecombe@intel.com,
	kai.huang@intel.com, kas@kernel.org, piliu@redhat.com,
	thuth@redhat.com, shradhagupta@linux.microsoft.com,
	ebiggers@kernel.org, jbouron@amazon.com, me@linux.beauty,
	mclapinski@google.com, graf@amazon.com, tangyouling@kylinos.cn,
	x86@kernel.org, kexec@lists.infradead.org
Subject: Re: [PATCH v8 06/11] x86: kexec_file: Use the common segment helpers
Date: Thu, 12 Nov 2026 14:08:21 +0000	[thread overview]
Message-ID: <sashiko-outbox-211269@kernel.org> (raw)
In-Reply-To: <20261112133418.4044428-7-ruanjinjie@huawei.com>

Thank you for your contribution! Sashiko AI review found 1 potential
issue to consider:
- [High] x86/crash: unset elfcorehdr_index in crash_load_segments()
  breaks hotplug
--

commit 1b8e09baefdcc28fe15998b5723b09d361d15f6e
Author: Jinjie Ruan <ruanjinjie@huawei.com>

x86: kexec_file: Use the common segment helpers

This commit replaces open-coded ELF core header and initrd segment loading
in x86 kexec_file with the common kexec_prepare_elf_core_header(),
kexec_add_elf_core_header(), and kexec_add_initrd() helpers.

> diff --git a/arch/x86/kernel/crash.c b/arch/x86/kernel/crash.c
> index e6f23933a6df2..8d56d39ebbd53 100644
> --- a/arch/x86/kernel/crash.c
> +++ b/arch/x86/kernel/crash.c
> @@ -354,14 +354,12 @@ int crash_load_segments(struct kimage *image)
>  				  .buf_max = ULONG_MAX, .top_down = false };
>  
>  	/* Prepare elf headers and add a segment */
> -	ret = crash_prepare_headers(IS_ENABLED(CONFIG_X86_64), &kbuf.buffer,
> -				    &kbuf.bufsz, &pnum);
> +	ret = kexec_prepare_elf_core_header(image, IS_ENABLED(CONFIG_X86_64),
> +					    &pnum);
>  	if (ret)
>  		return ret;
>  
> -	image->elf_headers	= kbuf.buffer;
> -	image->elf_headers_sz	= kbuf.bufsz;
> -	kbuf.memsz		= kbuf.bufsz;
> +	kbuf.memsz = image->elf_headers_sz;
>  
>  #ifdef CONFIG_CRASH_HOTPLUG
>  	/*
> @@ -374,28 +372,15 @@ int crash_load_segments(struct kimage *image)
>  		pnum += 2 + CONFIG_NR_CPUS;
>  
>  	if (pnum < (unsigned long)PN_XNUM) {
> -		kbuf.memsz = pnum * sizeof(Elf64_Phdr);
> -		kbuf.memsz += sizeof(Elf64_Ehdr);
> -
> -		image->elfcorehdr_index = image->nr_segments;
> -
> -		/* Mark as usable to crash kernel, else crash kernel fails on boot */
> -		image->elf_headers_sz = kbuf.memsz;
> +		kbuf.memsz = pnum * sizeof(Elf64_Phdr) + sizeof(Elf64_Ehdr);
>  	} else {
>  		pr_err("number of Phdrs %lu exceeds max\n", pnum);
>  	}
>  #endif
>  
>  	kbuf.buf_align = ELF_CORE_HEADER_ALIGN;
> -	kbuf.mem = KEXEC_BUF_MEM_UNKNOWN;
> -	ret = kexec_add_buffer(&kbuf);
> -	if (ret)
> -		return ret;
> -	image->elf_load_addr = kbuf.mem;
> -	kexec_dprintk("Loaded ELF headers at 0x%lx bufsz=0x%lx memsz=0x%lx\n",
> -		      image->elf_load_addr, kbuf.bufsz, kbuf.memsz);
>  
> -	return ret;
> +	return kexec_add_elf_core_header(image, &kbuf);
>  }

[Severity: High]
Can this leave image->elfcorehdr_index unset (-1) when CONFIG_CRASH_HOTPLUG
is enabled?

kexec_prepare_elf_core_header() -> crash_prepare_headers() ->
crash_prepare_elf64_headers() aligns image->elf_headers_sz up to
ELF_CORE_HEADER_ALIGN (4096), whereas crash_load_segments() computes an
unaligned kbuf.memsz for the hotplug reservation.  In
kexec_add_elf_core_header(), image->elfcorehdr_index is only updated when
memsz strictly exceeds image->elf_headers_sz:

kernel/kexec_file.c:kexec_add_elf_core_header() {
	...
	/* The crash hotplug reservation can exceed the header size. */
	if (memsz > image->elf_headers_sz) {
		image->elf_headers_sz = memsz;
#ifdef CONFIG_CRASH_HOTPLUG
		image->elfcorehdr_index = image->nr_segments - 1;
#endif
	}
	...
}

Whenever the unaligned hotplug kbuf.memsz fits within the same 4096-byte
multiple as the initial header (for example, when CONFIG_MEMORY_HOTPLUG is
disabled and CONFIG_NR_CPUS equals num_possible_cpus()), memsz <=
image->elf_headers_sz and image->elfcorehdr_index remains -1.
kexec_calculate_store_digests() then includes the elfcorehdr segment in the
purgatory SHA-256 digest, so any later CPU or memory hotplug update to
elfcorehdr causes purgatory digest verification to fail on crash.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261112133418.4044428-1-ruanjinjie@huawei.com?part=6


  reply	other threads:[~2026-11-12 14:08 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-12 13:34 [PATCH v8 00/11] kexec: Rework segment loading and fix CMA retries Jinjie Ruan
2026-11-12 13:34 ` Jinjie Ruan
2026-11-12 13:34 ` [PATCH v8 01/11] kexec: Free the elf core header in kimage_file_post_load_cleanup() Jinjie Ruan
2026-11-12 13:34   ` Jinjie Ruan
2026-11-12 13:47   ` sashiko-bot
2026-11-12 13:34 ` [PATCH v8 02/11] kexec: Add helpers to load the elf core header, initrd and FDT Jinjie Ruan
2026-11-12 13:34   ` Jinjie Ruan
2026-11-12 13:59   ` sashiko-bot
2026-11-12 13:34 ` [PATCH v8 03/11] arm64: kexec_file: Load the other segments with common helpers Jinjie Ruan
2026-11-12 13:34   ` Jinjie Ruan
2026-11-12 13:45   ` sashiko-bot
2026-11-12 13:34 ` [PATCH v8 04/11] LoongArch: " Jinjie Ruan
2026-11-12 13:34   ` Jinjie Ruan
2026-11-12 13:52   ` sashiko-bot
2026-11-12 13:34 ` [PATCH v8 05/11] riscv: kexec_file: Load the extra " Jinjie Ruan
2026-11-12 13:34   ` Jinjie Ruan
2026-11-12 13:53   ` sashiko-bot
2026-11-12 13:34 ` [PATCH v8 06/11] x86: kexec_file: Use the common segment helpers Jinjie Ruan
2026-11-12 13:34   ` Jinjie Ruan
2026-11-12 14:08   ` sashiko-bot [this message]
2026-11-12 13:34 ` [PATCH v8 07/11] powerpc: " Jinjie Ruan
2026-11-12 13:34   ` Jinjie Ruan
2026-11-12 14:01   ` sashiko-bot
2026-11-12 13:34 ` [PATCH v8 08/11] kexec: Extract kexec_free_segment_cma() from kimage_free_cma() Jinjie Ruan
2026-11-12 13:34   ` Jinjie Ruan
2026-11-12 14:07   ` sashiko-bot
2026-11-12 13:34 ` [PATCH v8 09/11] kexec: Add kexec_rollback_segments() helper Jinjie Ruan
2026-11-12 13:34   ` Jinjie Ruan
2026-11-12 14:15   ` sashiko-bot
2026-11-12 13:34 ` [PATCH v8 10/11] arm64: kexec_file: Fix CMA segment placement retries Jinjie Ruan
2026-11-12 13:34   ` Jinjie Ruan
2026-11-12 14:14   ` sashiko-bot
2026-11-12 13:34 ` [PATCH v8 11/11] LoongArch: " Jinjie Ruan
2026-11-12 13:34   ` Jinjie Ruan
2026-11-12 14:21   ` sashiko-bot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=sashiko-outbox-211269@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=Yeking@Red54.com \
    --cc=adityag@linux.ibm.com \
    --cc=akpm@linux-foundation.org \
    --cc=alex@ghiti.fr \
    --cc=aou@eecs.berkeley.edu \
    --cc=ardb@kernel.org \
    --cc=arnd@arndb.de \
    --cc=baoquan.he@linux.dev \
    --cc=blum@kernel.org \
    --cc=bp@alien8.de \
    --cc=brads@mainlining.org \
    --cc=catalin.marinas@arm.com \
    --cc=chenhuacai@kernel.org \
    --cc=chleroy@kernel.org \
    --cc=coiby.xu@gmail.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=ebiggers@kernel.org \
    --cc=gaohan@iscas.ac.cn \
    --cc=graf@amazon.com \
    --cc=guoren@kernel.org \
    --cc=hpa@zytor.com \
    --cc=hui.wang@canonical.com \
    --cc=ionut.nechita@windriver.com \
    --cc=jbouron@amazon.com \
    --cc=kai.huang@intel.com \
    --cc=kas@kernel.org \
    --cc=kernel@xen0n.name \
    --cc=kexec@lists.infradead.org \
    --cc=leitao@debian.org \
    --cc=maddy@linux.ibm.com \
    --cc=mark.rutland@arm.com \
    --cc=mclapinski@google.com \
    --cc=me@linux.beauty \
    --cc=mingo@redhat.com \
    --cc=mkchauras@gmail.com \
    --cc=mpe@ellerman.id.au \
    --cc=mpilaniy@redhat.com \
    --cc=npiggin@gmail.com \
    --cc=palmer@dabbelt.com \
    --cc=pasha.tatashin@soleen.com \
    --cc=piliu@redhat.com \
    --cc=pjw@kernel.org \
    --cc=pratyush@kernel.org \
    --cc=prudo@redhat.com \
    --cc=qirui.001@bytedance.com \
    --cc=richard.lyu@suse.com \
    --cc=rick.p.edgecombe@intel.com \
    --cc=ritesh.list@gmail.com \
    --cc=robh@kernel.org \
    --cc=rppt@kernel.org \
    --cc=ruanjinjie@huawei.com \
    --cc=sashiko-reviews@lists.linux.dev \
    --cc=seanjc@google.com \
    --cc=shradhagupta@linux.microsoft.com \
    --cc=sohammetha01@gmail.com \
    --cc=sourabhjain@linux.ibm.com \
    --cc=sshegde@linux.ibm.com \
    --cc=tangyouling@kylinos.cn \
    --cc=tglx@kernel.org \
    --cc=thuth@redhat.com \
    --cc=tzimmermann@suse.de \
    --cc=vishal.l.verma@intel.com \
    --cc=will@kernel.org \
    --cc=x86@kernel.org \
    --cc=yeoreum.yun@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.