• Dave Young's avatar
    x86/kexec: Do not reserve EFI setup_data in the kexec e820 table · 8efbc518
    Dave Young authored
    
    
    The e820 table for the kexec kernel unconditionally marks setup_data as
    reserved because the second kernel can reuse setup_data passed by the
    1st kernel's boot loader, for example SETUP_PCI marked regions like PCI
    BIOS, etc.
    
    SETUP_EFI types, however, are used by kexec itself to enable EFI in the
    2nd kernel. Thus, it is pointless to add this type of setup_data to the
    kexec e820 table as reserved.
    
    IOW, what happens is this:
    
      -  1st physical boot: no SETUP_EFI.
    
      - kexec loads a new kernel and prepares a SETUP_EFI setup_data blob, then
      reboots the machine.
    
      - 2nd kernel sees SETUP_EFI, reserves it both in the e820 and in the
      kexec e820 table.
    
      - If another kexec load is executed, it prepares a new SETUP_EFI blob and
      then reboots the machine into the new kernel.
    
      5. The 3rd kexec-ed kernel has two SETUP_EFI ranges reserved. And so on...
    
    Thus skip SETUP_EFI while reserving setup_data in the e820_table_kexec
    table because it is not needed.
    
     [ bp: Heavily massage commit message, shorten line and improve comment. ]
    Signed-off-by: default avatarDave Young <dyoung@redhat.com>
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Link: https://lkml.kernel.org/r/20200212110424.GA2938@dhcp-128-65.nay.redhat.com
    8efbc518
e820.c 36.6 KB