Messages in this thread Patch in this message | | | Date | Fri, 05 May 2006 16:37:40 +0300 | From | Alon Bar-Lev <> | Subject | [PATCH][TAKE 4] THE LINUX/I386 BOOT PROTOCOL - Breaking the 256 limit |
| |
Extending the kernel parameters to a user determined size on boot protocol >=2.02 for i386 and x86_64 architectures.
Signed-off-by: Alon Bar-Lev <alon.barlev@gmail.com>
---
Hello,
Current implementation allows the kernel to receive up to 255 characters from the bootloader.
In current environment, the command-line is used in order to specify many values, including suspend/resume, module arguments, splash, initramfs and more.
255 characters are not enough anymore.
This is take 4 of this submission.
Take 4 (current), no reply of what is the problem in LILO. Can someone please reply Peter questions? I understand that people don't want the new kernel config option... But fixing LILO should be more complex.
Take 3 - Back to menuconfig option, so it won't break LILO (Although if it is broken because of this, it should be fixed...).
Here are the comments from H. Peter Anvin: > Does anyone know the actual details of the LILO breakage? > If the problem is that LILO doesn't null-terminate the string when it's too long, > then we can deal with this automatically, without introducing compile-time options > (which were already once rejected.) > > If the problem is with LILO booting *old* kernels, then that's going to have to require > some LILO changes, and probably a boot revision bump.
Take 2 - Removed the menuconfig into a fixed 2048 size. This patch was rejected. This is what the 2.6.11-rc2 changelog has to say about the matter:
> Revert "x86_64/i386: increase command line size" patch > It's a bootup dependancy, you can't just increase it > randomly, and it breaks booting with LILO. > Pointed out by Janos Farkas and Adrian Bunk.
Take 1 - Patch that allows command-line size to be determined in menuconfig. People did not want to see a new config option.
---
If any of you think that this should be applied for other architectures, please reply.
Current architectures that have 256 limit are: alpha, cris, i386, m64k, mips, sh, sh64, sparc, sparc64, x86_64, xtensa
Current architectures that have 512 values are: frv(512), h8300(512), ia64(512), m32r(512), m68knommu(512), mips(512), powerpc(512), v850(512)
Current architectures that are OK: arm(1024), arm26(1024), parisc(1024)
Current strange ones: s390(896) - I guess IBM has a good reason for this constant...
Best Regards, Alon Bar-Lev
diff -urNp linux-2.6.16/arch/i386/Kconfig linux-2.6.16.new/arch/i386/Kconfig --- linux-2.6.16/arch/i386/Kconfig 2006-03-20 07:53:29.000000000 +0200 +++ linux-2.6.16.new/arch/i386/Kconfig 2006-04-14 01:35:06.000000000 +0300 @@ -644,6 +644,14 @@ config EFI anything about EFI). However, even with this option, the resultant kernel should continue to boot on existing non-EFI platforms. +config COMMAND_LINE_SIZE + int "Maximum kernel command-line size" + range 256 4096 + default 256 + ---help--- + This enables adjusting maximum command-line size. If you are unsure + specify 256. + config IRQBALANCE bool "Enable kernel irq balancing" depends on SMP && X86_IO_APIC diff -urNp linux-2.6.16/arch/x86_64/Kconfig linux-2.6.16.new/arch/x86_64/Kconfig --- linux-2.6.16/arch/x86_64/Kconfig 2006-03-20 07:53:29.000000000 +0200 +++ linux-2.6.16.new/arch/x86_64/Kconfig 2006-04-14 01:35:30.000000000 +0300 @@ -445,6 +445,14 @@ config PHYSICAL_START Don't change this unless you know what you are doing. +config COMMAND_LINE_SIZE + int "Maximum kernel command-line size" + range 256 4096 + default 256 + ---help--- + This enables adjusting maximum command-line size. If you are unsure + specify 256. + config SECCOMP bool "Enable seccomp to safely compute untrusted bytecode" depends on PROC_FS diff -urNp linux-2.6.16/include/asm-i386/param.h linux-2.6.16.new/include/asm-i386/param.h --- linux-2.6.16/include/asm-i386/param.h 2006-03-20 07:53:29.000000000 +0200 +++ linux-2.6.16.new/include/asm-i386/param.h 2006-04-14 02:00:45.000000000 +0300 @@ -19,6 +19,15 @@ #endif #define MAXHOSTNAMELEN 64 /* max length of hostname */ + +/* + * This COMMAND_LINE_SIZE definition was left here + * for compatability, its correct location is in setup.h. + * Boot loaders that use this parameters will continue + * to use 256 maximum command-line size. + */ +#ifndef CONFIG_COMMAND_LINE_SIZE #define COMMAND_LINE_SIZE 256 +#endif #endif diff -urNp linux-2.6.16/include/asm-i386/setup.h linux-2.6.16.new/include/asm-i386/setup.h --- linux-2.6.16/include/asm-i386/setup.h 2006-03-20 07:53:29.000000000 +0200 +++ linux-2.6.16.new/include/asm-i386/setup.h 2006-04-14 01:32:16.000000000 +0300 @@ -17,7 +17,7 @@ #define MAX_NONPAE_PFN (1 << 20) #define PARAM_SIZE 4096 -#define COMMAND_LINE_SIZE 256 +#define COMMAND_LINE_SIZE CONFIG_COMMAND_LINE_SIZE #define OLD_CL_MAGIC_ADDR 0x90020 #define OLD_CL_MAGIC 0xA33F diff -urNp linux-2.6.16/include/asm-x86_64/setup.h linux-2.6.16.new/include/asm-x86_64/setup.h --- linux-2.6.16/include/asm-x86_64/setup.h 2006-03-20 07:53:29.000000000 +0200 +++ linux-2.6.16.new/include/asm-x86_64/setup.h 2006-04-14 01:33:27.000000000 +0300 @@ -1,6 +1,6 @@ #ifndef _x8664_SETUP_H #define _x8664_SETUP_H -#define COMMAND_LINE_SIZE 256 +#define COMMAND_LINE_SIZE CONFIG_COMMAND_LINE_SIZE #endif
| |