[PATCH] prepend elfcorehdr instead of appending it to the crash-kernel command-line.
Vivek Goyal
vgoyal at redhat.com
Thu May 14 07:34:37 PDT 2015
On Wed, May 13, 2015 at 12:05:54PM +0200, KarimAllah Ahmed wrote:
> Any parameter passed after '--' in the kernel command-line will not be parsed
> by the kernel at all, instead it will be passed directly to init process.
>
> Currently the kernel appends elfcorehdr=<paddr> to the cmdline passed from kexec
> load, and if this command-line is used to pass parameters to init process this
> means that 'elfcorehdr' will not be parsed as a kernel parameter at all which
> will be a problem for vmcore subsystem since it will know nothing about the
> location of the ELF structure!
>
> Prepending 'elfcorehdr' instead of appending it fixes this problem since it
> ensures that it always comes before '--' and so it's always parsed as a kernel
> command-line parameter.
>
> Even with this patch things can still go wrong if 'CONFIG_CMDLINE' was also used
> to embedd a command-line to the crash dump kernel and this command-line contains
> '--' since the current behavior of the kernel is to actually append the boot
> loader command-line to the embedded command-line.
>
> Signed-off-by: KarimAllah Ahmed <karahmed at amazon.de>
Looks good to me.
We might require a similar change in kexec-tools for old systemcall?
Acked-by: Vivek Goyal <vgoyal at redhat.com>
Thanks
Vivek
> Cc: Thomas Gleixner <tglx at linutronix.de>
> Cc: Ingo Molnar <mingo at redhat.com>
> Cc: H. Peter Anvin <hpa at zytor.com>
> Cc: Andrew Morton <akpm at linux-foundation.org>
> Cc: Vivek Goyal <vgoyal at redhat.com>
> Cc: Haren Myneni <hbabu at us.ibm.com>
> Cc: Eric Biederman <ebiederm at xmission.com>
> ---
> arch/x86/kernel/kexec-bzimage64.c | 11 ++++++-----
> 1 file changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/arch/x86/kernel/kexec-bzimage64.c b/arch/x86/kernel/kexec-bzimage64.c
> index ca05f86..ca83f7ac 100644
> --- a/arch/x86/kernel/kexec-bzimage64.c
> +++ b/arch/x86/kernel/kexec-bzimage64.c
> @@ -72,15 +72,16 @@ static int setup_cmdline(struct kimage *image, struct boot_params *params,
> unsigned long cmdline_len)
> {
> char *cmdline_ptr = ((char *)params) + cmdline_offset;
> - unsigned long cmdline_ptr_phys, len;
> + unsigned long cmdline_ptr_phys, len = 0;
> uint32_t cmdline_low_32, cmdline_ext_32;
>
> - memcpy(cmdline_ptr, cmdline, cmdline_len);
> if (image->type == KEXEC_TYPE_CRASH) {
> - len = sprintf(cmdline_ptr + cmdline_len - 1,
> - " elfcorehdr=0x%lx", image->arch.elf_load_addr);
> - cmdline_len += len;
> + len = sprintf(cmdline_ptr,
> + "elfcorehdr=0x%lx ", image->arch.elf_load_addr);
> }
> + memcpy(cmdline_ptr + len, cmdline, cmdline_len);
> + cmdline_len += len;
> +
> cmdline_ptr[cmdline_len - 1] = '\0';
>
> pr_debug("Final command line is: %s\n", cmdline_ptr);
> --
> 1.7.9.5
More information about the kexec
mailing list