On 09/07/14 22:41, Michael Brown wrote:
The PE/COFF headers currently describe only the initialised-data portions of the image, and result in no space being allocated for the uninitialised-data portions. Consequently, the EFI boot stub will end up overwriting unexpected areas of memory, with unpredictable results. Fix by including a .bss section in the PE/COFF headers (functionally equivalent to the init_size field in the bzImage header).
Following on from this: hpa mentioned via IRC that we should also take alignment into account. I am unsure if init_size already includes padding for alignment; on my sample kernel init_size is >16MB (with 16MB alignment), so it looks plausible to me that alignment is already accounted for.
If not, then the following trivial patch exposes the desired alignment via the PE/COFF headers:
diff --git a/arch/x86/boot/header.S b/arch/x86/boot/header.S index 7a6d43a..16ef025 100644 --- a/arch/x86/boot/header.S +++ b/arch/x86/boot/header.S @@ -154,7 +154,7 @@ extra_header_fields: #else .quad 0 # ImageBase #endif - .long 0x20 # SectionAlignment + .long CONFIG_PHYSICAL_ALIGN # SectionAlignment .long 0x20 # FileAlignment .word 0 # MajorOperatingSystemVersion .word 0 # MinorOperatingSystemVersion -- 1.8.4.5 Michael -- To unsubscribe from this list: send the line "unsubscribe linux-efi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html