* [RFC/PATCH 1/17][kexec-tools-1.101] vmlinux parameter segment stomping fix
@ 2005-03-28 13:25 Vivek Goyal
2005-07-18 18:21 ` [Fastboot] " Eric W. Biederman
0 siblings, 1 reply; 2+ messages in thread
From: Vivek Goyal @ 2005-03-28 13:25 UTC (permalink / raw)
To: Eric W. Biederman, fastboot; +Cc: lkml, Andrew Morton
[-- Attachment #1: Type: text/plain, Size: 1 bytes --]
[-- Attachment #2: kexec-tools-vmlinux-parameter-segment-stomping-fix.patch --]
[-- Type: text/x-patch, Size: 2026 bytes --]
During loading of panic kernel(vmlinux), it was found that on some systems,
parameter segment was being stomped over by kernel. This was resulting in
corruption of e820 memory map and leading to boot memory allocator
initialization failures while booting into new kernel. This patch fixes the
problem by loading the parameter segment beyond alrady loaded kernel image
and setup code. A 64K buffer has been provided to avoid any stomping by
kernel.
Signed-off-by: Vivek Goyal <vgoyal@in.ibm.com>
---
kexec-tools-1.101-root/kexec/arch/i386/kexec-elf-x86.c | 16 ++++++++++++++--
1 files changed, 14 insertions(+), 2 deletions(-)
diff -puN kexec/arch/i386/kexec-elf-x86.c~kexec-tools-vmlinux-parameter-segment-stomping-fix kexec/arch/i386/kexec-elf-x86.c
--- kexec-tools-1.101/kexec/arch/i386/kexec-elf-x86.c~kexec-tools-vmlinux-parameter-segment-stomping-fix 2005-03-21 16:43:50.000000000 +0530
+++ kexec-tools-1.101-root/kexec/arch/i386/kexec-elf-x86.c 2005-03-21 16:43:50.000000000 +0530
@@ -199,15 +199,27 @@ int elf_x86_load(int argc, char **argv,
}
else if (arg_style == ARG_STYLE_LINUX) {
struct x86_linux_faked_param_header *hdr;
- unsigned long param_base;
+ unsigned long param_base, min_param_base = 0;
const unsigned char *ramdisk_buf;
off_t ramdisk_length;
struct entry32_regs regs;
+ int i;
/* Get the linux parameter header */
hdr = xmalloc(sizeof(*hdr));
+ /* Add parameter segment beyond already loaded segments, so that
+ * it does not get stomped by kernel. */
+ for (i = 0; i < info->nr_segments; i++) {
+ unsigned long temp;
+ temp = (unsigned long) info->segment[i].mem +
+ info->segment[i].memsz;
+ if (temp > min_param_base)
+ min_param_base = temp;
+ }
+ /* 64K of buffer to keep enough distance from kernel. */
+ min_param_base += 64*1024;
param_base = add_buffer(info, hdr, sizeof(*hdr), sizeof(*hdr),
- 16, 0, max_addr, 1);
+ 16, min_param_base, max_addr, 1);
/* Initialize the parameter header */
memset(hdr, 0, sizeof(*hdr));
_
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [Fastboot] [RFC/PATCH 1/17][kexec-tools-1.101] vmlinux parameter segment stomping fix
2005-03-28 13:25 [RFC/PATCH 1/17][kexec-tools-1.101] vmlinux parameter segment stomping fix Vivek Goyal
@ 2005-07-18 18:21 ` Eric W. Biederman
0 siblings, 0 replies; 2+ messages in thread
From: Eric W. Biederman @ 2005-07-18 18:21 UTC (permalink / raw)
To: Vivek Goyal; +Cc: fastboot, lkml
My apologies for taking so long to look at these patches.
I agree there is an issue here, but large parts of this
we need to address kernel side. If the parameter buffer is allocated
after the kernel there is no guarantee that it will be addressable
from the kernels early page table so this fix will not work.
As for the practical problem it addresses it looks like we simply
need to increase the size of the kernel's bss segment so we don't
stop things.
Problem agreed upon patch rejected.
Eric
Vivek Goyal <vgoyal@in.ibm.com> writes:
> During loading of panic kernel(vmlinux), it was found that on some systems,
> parameter segment was being stomped over by kernel. This was resulting in
> corruption of e820 memory map and leading to boot memory allocator
> initialization failures while booting into new kernel. This patch fixes the
> problem by loading the parameter segment beyond alrady loaded kernel image
> and setup code. A 64K buffer has been provided to avoid any stomping by
> kernel.
>
> Signed-off-by: Vivek Goyal <vgoyal@in.ibm.com>
> ---
>
> kexec-tools-1.101-root/kexec/arch/i386/kexec-elf-x86.c | 16 ++++++++++++++--
> 1 files changed, 14 insertions(+), 2 deletions(-)
>
> diff -puN kexec/arch/i386/kexec-elf-x86.c~kexec-tools-vmlinux-parameter-segment-stomping-fix kexec/arch/i386/kexec-elf-x86.c
> --- kexec-tools-1.101/kexec/arch/i386/kexec-elf-x86.c~kexec-tools-vmlinux-parameter-segment-stomping-fix 2005-03-21 16:43:50.000000000 +0530
> +++ kexec-tools-1.101-root/kexec/arch/i386/kexec-elf-x86.c 2005-03-21 16:43:50.000000000 +0530
> @@ -199,15 +199,27 @@ int elf_x86_load(int argc, char **argv,
> }
> else if (arg_style == ARG_STYLE_LINUX) {
> struct x86_linux_faked_param_header *hdr;
> - unsigned long param_base;
> + unsigned long param_base, min_param_base = 0;
> const unsigned char *ramdisk_buf;
> off_t ramdisk_length;
> struct entry32_regs regs;
> + int i;
>
> /* Get the linux parameter header */
> hdr = xmalloc(sizeof(*hdr));
> + /* Add parameter segment beyond already loaded segments, so that
> + * it does not get stomped by kernel. */
> + for (i = 0; i < info->nr_segments; i++) {
> + unsigned long temp;
> + temp = (unsigned long) info->segment[i].mem +
> + info->segment[i].memsz;
> + if (temp > min_param_base)
> + min_param_base = temp;
> + }
> + /* 64K of buffer to keep enough distance from kernel. */
> + min_param_base += 64*1024;
> param_base = add_buffer(info, hdr, sizeof(*hdr), sizeof(*hdr),
> - 16, 0, max_addr, 1);
> + 16, min_param_base, max_addr, 1);
>
> /* Initialize the parameter header */
> memset(hdr, 0, sizeof(*hdr));
> _
> _______________________________________________
> fastboot mailing list
> fastboot@lists.osdl.org
> http://lists.osdl.org/mailman/listinfo/fastboot
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2005-07-18 18:21 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-03-28 13:25 [RFC/PATCH 1/17][kexec-tools-1.101] vmlinux parameter segment stomping fix Vivek Goyal
2005-07-18 18:21 ` [Fastboot] " Eric W. Biederman
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®