• Arvind Sankar's avatar
    x86/boot/compressed/64: Remove .bss/.pgtable from bzImage · 3ee372cc
    Arvind Sankar authored
    Commit
    
      5b11f1ce ("x86, boot: straighten out ranges to copy/zero in
      compressed/head*.S")
    
    introduced a separate .pgtable section, splitting it out from the rest
    of .bss. This section was added without the writeable flag, marking it
    as read-only. This results in the linker putting the .rela.dyn section
    (containing bogus dynamic relocations from head_64.o) after the .bss and
    .pgtable sections.
    
    When objcopy is used to convert compressed/vmlinux into a binary for
    the bzImage:
    
    $ objcopy  -O binary -R .note -R .comment -S arch/x86/boot/compressed/vmlinux \
    		arch/x86/boot/vmlinux.bin
    
    the .bss and .pgtable sections get materialized as ~176KiB of zero
    bytes in the binary in order to place .rela.dyn at the correct location.
    
    Fix this by marking .pgtable as writeable. This moves the .rela.dyn
    section up in the ELF image layout so that .bss and .pgtable are the
    last allocated sections and so don't appear in bzImage.
    
     [ bp: Massage commit message. ]
    Signed-off-by: default avatarArvind Sankar <nivedita@alum.mit.edu>
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Acked-by: default avatarKees Cook <keescook@chromium.org>
    Link: https://lkml.kernel.org/r/20200109150218.16544-1-nivedita@alum.mit.edu
    3ee372cc
head_64.S 15.7 KB