All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH]kexec:i386:kexec-bzImage: Fix pass garbage command line to new kernel
@ 2013-04-08  9:25 Wang YanQing
  0 siblings, 0 replies; only message in thread
From: Wang YanQing @ 2013-04-08  9:25 UTC (permalink / raw)
  To: kexec; +Cc: tjd21, horms, zhangyanfei, ebiederm, hari, zhangyanfei.yes


I get garbage output of /proc/cmdline and in dmesg in new
kernel context when I use kexec to load new kernel bzImage
without append command line like below:

kexec -l bzImage --initrd=/boot/initramfs
kexec -e

The reason is kernel copy the command line
from the bootloader like below which copy/paste
from linux/arch/x86/kernel/head_32.S:

        movl pa(boot_params) + NEW_CL_POINTER,%esi
        andl %esi,%esi
        jz 1f                   # No command line
        movl $pa(boot_command_line),%edi
        movl $(COMMAND_LINE_SIZE/4),%ecx

This patch fix it.

[
although another patch
"kexec:i386/kexec-[bzImage|elf-x86]:x86_64/kexec-bzImage64: Use "\0" as command line instead of empty command line"
has resolved the garbage output by put a '\0' at the start, but I thinks this patch has sense too, it stop
kernel copy not command line data into the command line buffer in kernel
]

Signed-off-by: Wang YanQing <udknight@gmail.com>
---
 kexec/arch/i386/kexec-bzImage.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/kexec/arch/i386/kexec-bzImage.c b/kexec/arch/i386/kexec-bzImage.c
index 29f280d..13cd3f9 100644
--- a/kexec/arch/i386/kexec-bzImage.c
+++ b/kexec/arch/i386/kexec-bzImage.c
@@ -119,6 +119,7 @@ int do_bzImage_load(struct kexec_info *info,
 	unsigned long cmdline_end;
 	unsigned long kern16_size_needed;
 	unsigned long heap_size = 0;
+	off_t alloc_command_line_len = 0;
 
 	/*
 	 * Find out about the file I am about to load.
@@ -145,10 +146,12 @@ int do_bzImage_load(struct kexec_info *info,
 			dbgprintf("Kernel command line too long for kernel!\n");
 			return -1;
 		}
+		alloc_command_line_len = (uintmax_t)setup_header.cmdline_size;
 	} else {
 		if (command_line_len > 255) {
 			dbgprintf("WARNING: This kernel may only support 255 byte command lines\n");
 		}
+		alloc_command_line_len = 255;
 	}
 
 	if (setup_header.protocol_version >= 0x0205) {
@@ -231,7 +234,7 @@ int do_bzImage_load(struct kexec_info *info,
 		if (kern16_size_needed < 4096)
 			kern16_size_needed = 4096;
 	}
-	setup_size = kern16_size_needed + command_line_len +
+	setup_size = kern16_size_needed + alloc_command_line_len +
 			 PURGATORY_CMDLINE_SIZE;
 	real_mode = xmalloc(setup_size);
 	memset(real_mode, 0, setup_size);
-- 
1.7.12.4.dirty

_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2013-04-08  9:25 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-04-08  9:25 [PATCH]kexec:i386:kexec-bzImage: Fix pass garbage command line to new kernel Wang YanQing

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.