efi/x86: Add kernel preferred address to PE header
authorArvind Sankar <nivedita@alum.mit.edu>
Sun, 8 Mar 2020 08:08:48 +0000 (09:08 +0100)
committerIngo Molnar <mingo@kernel.org>
Sun, 8 Mar 2020 08:58:20 +0000 (09:58 +0100)
Store the kernel's link address as ImageBase in the PE header. Note that
the PE specification requires the ImageBase to be 64k aligned. The
preferred address should almost always satisfy that, except for 32-bit
kernel if the configuration has been customized.

Signed-off-by: Arvind Sankar <nivedita@alum.mit.edu>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Link: https://lore.kernel.org/r/20200303221205.4048668-4-nivedita@alum.mit.edu
Link: https://lore.kernel.org/r/20200308080859.21568-18-ardb@kernel.org
arch/x86/boot/header.S

index 4ee25e2..735ad7f 100644 (file)
@@ -138,10 +138,12 @@ optional_header:
 #endif
 
 extra_header_fields:
+       # PE specification requires ImageBase to be 64k aligned
+       .set    image_base, (LOAD_PHYSICAL_ADDR + 0xffff) & ~0xffff
 #ifdef CONFIG_X86_32
-       .long   0                               # ImageBase
+       .long   image_base                      # ImageBase
 #else
-       .quad   0                               # ImageBase
+       .quad   image_base                      # ImageBase
 #endif
        .long   0x20                            # SectionAlignment
        .long   0x20                            # FileAlignment