Better error message suggested by Vivek...
Add some simple bounds checking for crashkernel args in i386 & x86_64. Signed-off-by: Prarit Bhargava <[EMAIL PROTECTED]> diff -urNp linux-2.6.19.2.orig/arch/i386/kernel/machine_kexec.c linux-2.6.19.2/arch/i386/kernel/machine_kexec.c --- linux-2.6.19.2.orig/arch/i386/kernel/machine_kexec.c 2007-01-15 11:13:43.000000000 -0500 +++ linux-2.6.19.2/arch/i386/kernel/machine_kexec.c 2007-01-15 11:17:09.000000000 -0500 @@ -160,9 +160,6 @@ static int __init parse_crashkernel(char size = memparse(arg, &arg); if (*arg == '@') { base = memparse(arg+1, &arg); - /* FIXME: Do I want a sanity check - * to validate the memory range? - */ crashk_res.start = base; crashk_res.end = base + size - 1; } diff -urNp linux-2.6.19.2.orig/arch/i386/kernel/setup.c linux-2.6.19.2/arch/i386/kernel/setup.c --- linux-2.6.19.2.orig/arch/i386/kernel/setup.c 2007-01-15 11:13:43.000000000 -0500 +++ linux-2.6.19.2/arch/i386/kernel/setup.c 2007-01-15 11:19:18.000000000 -0500 @@ -1176,9 +1176,20 @@ void __init setup_bootmem_allocator(void } #endif #ifdef CONFIG_KEXEC - if (crashk_res.start != crashk_res.end) + if ((crashk_res.start < crashk_res.end) && + (crashk_res.end <= (max_low_pfn << PAGE_SHIFT))) { reserve_bootmem(crashk_res.start, - crashk_res.end - crashk_res.start + 1); + crashk_res.end - crashk_res.start + 1); + } + else { + printk(KERN_ERR "Memory for crash kernel (0x%lx to 0x%lx) not" + "within permissible range\ndisabling kdump\n", + crashk_res.start, crashk_res.end); + crashk_res.end = 0; + crashk_res.start = 0; + } +#endif + #endif } diff -urNp linux-2.6.19.2.orig/arch/x86_64/kernel/machine_kexec.c linux-2.6.19.2/arch/x86_64/kernel/machine_kexec.c --- linux-2.6.19.2.orig/arch/x86_64/kernel/machine_kexec.c 2007-01-15 11:13:29.000000000 -0500 +++ linux-2.6.19.2/arch/x86_64/kernel/machine_kexec.c 2007-01-15 11:17:09.000000000 -0500 @@ -247,9 +247,6 @@ static int __init setup_crashkernel(char return -EINVAL; if (*p == '@') { base = memparse(p+1, &p); - /* FIXME: Do I want a sanity check to validate the - * memory range? Yes you do, but it's too early for - * e820 -AK */ crashk_res.start = base; crashk_res.end = base + size - 1; } diff -urNp linux-2.6.19.2.orig/arch/x86_64/kernel/setup.c linux-2.6.19.2/arch/x86_64/kernel/setup.c --- linux-2.6.19.2.orig/arch/x86_64/kernel/setup.c 2007-01-15 11:13:29.000000000 -0500 +++ linux-2.6.19.2/arch/x86_64/kernel/setup.c 2007-01-15 11:19:40.000000000 -0500 @@ -485,9 +485,18 @@ void __init setup_arch(char **cmdline_p) } #endif #ifdef CONFIG_KEXEC - if (crashk_res.start != crashk_res.end) { + /* FIXME: still too early for e820 range fix but better than nothing */ + if ((crashk_res.start < crashk_res.end) && + (crashk_res.end <= (max_low_pfn << PAGE_SHIFT))) { reserve_bootmem_generic(crashk_res.start, - crashk_res.end - crashk_res.start + 1); + crashk_res.end - crashk_res.start + 1); + } + else { + printk(KERN_ERR "Memory for crash kernel (0x%lx to 0x%lx) not" + "within permissible range\ndisabling kdump\n", + crashk_res.start, crashk_res.end); + crashk_res.end = 0; + crashk_res.start = 0; } #endif _______________________________________________ fastboot mailing list fastboot@lists.osdl.org https://lists.osdl.org/mailman/listinfo/fastboot