From: Venkatesh Pallipadi The setup.S data and code is not cleanly separated. The current space reserved for setup header is not enough to fit the complete header. As a result, part of the header (EDDBUF) will overwrite the initial code. I haven't seen any negative impact of this bug. As, by the time the setup code is overwritten, we would have finished executing it anyway. But, I think it is better to separate the header and code and prevent this data_overwriting_the_code condition. The atatched patch adds some space in the header to fit all the data listed in Documentation/i386/zero-page.txt for both i386 and x86_64 (and updates zero-page.txt). Signed-off-by:: "Venkatesh Pallipadi" Signed-off-by: Andrew Morton --- 25-akpm/Documentation/i386/zero-page.txt | 4 ++++ 25-akpm/arch/i386/boot/setup.S | 4 +++- 25-akpm/arch/x86_64/boot/setup.S | 4 +++- 3 files changed, 10 insertions(+), 2 deletions(-) diff -puN arch/i386/boot/setup.S~x86-remove-data-header-and-code-overlap-in-boot-setups arch/i386/boot/setup.S --- 25/arch/i386/boot/setup.S~x86-remove-data-header-and-code-overlap-in-boot-setups 2004-11-17 00:00:03.697043000 -0800 +++ 25-akpm/arch/i386/boot/setup.S 2004-11-17 00:00:03.703042088 -0800 @@ -162,7 +162,9 @@ ramdisk_max: .long (-__PAGE_OFFSET-(512 # the contents of an initrd trampoline: call start_of_setup - .space 1024 + .align 16 + # The offset at this point is 0x240 + .space (0x7ff-0x240+1) # E820 & EDD space (ending at 0x7ff) # End of setup header ##################################################### start_of_setup: diff -puN arch/x86_64/boot/setup.S~x86-remove-data-header-and-code-overlap-in-boot-setups arch/x86_64/boot/setup.S --- 25/arch/x86_64/boot/setup.S~x86-remove-data-header-and-code-overlap-in-boot-setups 2004-11-17 00:00:03.698042848 -0800 +++ 25-akpm/arch/x86_64/boot/setup.S 2004-11-17 00:00:03.704041936 -0800 @@ -158,7 +158,9 @@ cmd_line_ptr: .long 0 # (Header versio ramdisk_max: .long 0xffffffff trampoline: call start_of_setup - .space 1024 + .align 16 + # The offset at this point is 0x240 + .space (0x7ff-0x240+1) # E820 & EDD space (ending at 0x7ff) # End of setup header ##################################################### start_of_setup: diff -puN Documentation/i386/zero-page.txt~x86-remove-data-header-and-code-overlap-in-boot-setups Documentation/i386/zero-page.txt --- 25/Documentation/i386/zero-page.txt~x86-remove-data-header-and-code-overlap-in-boot-setups 2004-11-17 00:00:03.700042544 -0800 +++ 25-akpm/Documentation/i386/zero-page.txt 2004-11-17 00:00:03.704041936 -0800 @@ -74,6 +74,10 @@ Offset Type Description 0x21c unsigned long INITRD_SIZE, size in bytes of ramdisk image 0x220 4 bytes (setup.S) 0x224 unsigned short setup.S heap end pointer +0x226 unsigned short zero_pad +0x228 unsigned long cmd_line_ptr +0x22c unsigned long ramdisk_max +0x230 16 bytes trampoline 0x290 - 0x2cf EDD_MBR_SIG_BUFFER (edd.S) 0x2d0 - 0x600 E820MAP 0x600 - 0x7ff EDDBUF (edd.S) for disk signature read sector _