• Eric Snowberg's avatar
    x86/efi: Allocate e820 buffer before calling efi_exit_boot_service · b84a64fa
    Eric Snowberg authored
    The following commit:
    
      d6493401 ("x86/efi: Use efi_exit_boot_services()")
    
    introduced a regression on systems with large memory maps causing them
    to hang on boot. The first "goto get_map" that was removed from
    exit_boot() ensured there was enough room for the memory map when
    efi_call_early(exit_boot_services) was called. This happens when
    (nr_desc > ARRAY_SIZE(params->e820_table).
    
    Chain of events:
    
      exit_boot()
        efi_exit_boot_services()
          efi_get_memory_map                  <- at this point the mm can't grow over 8 desc
          priv_func()
            exit_boot_func()
              allocate_e820ext()              <- new mm grows over 8 desc from e820 alloc
          efi_call_early(exit_boot_services)  <- mm key doesn't match so retry
          efi_call_early(get_memory_map)      <- not enough room for new mm
          system hangs
    
    This patch allocates the e820 buffer before calling efi_exit_boot_services()
    and fixes the regression.
    
     [ mingo: minor cleanliness edits. ]
    Signed-off-by: default avatarEric Snowberg <eric.snowberg@oracle.com>
    Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    Cc: <stable@vger.kernel.org>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Arend van Spriel <arend.vanspriel@broadcom.com>
    Cc: Bhupesh Sharma <bhsharma@redhat.com>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Dave Hansen <dave.hansen@intel.com>
    Cc: Hans de Goede <hdegoede@redhat.com>
    Cc: Joe Perches <joe@perches.com>
    Cc: Jon Hunter <jonathanh@nvidia.com>
    Cc: Julien Thierry <julien.thierry@arm.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Marc Zyngier <marc.zyngier@arm.com>
    Cc: Matt Fleming <matt@codeblueprint.co.uk>
    Cc: Nathan Chancellor <natechancellor@gmail.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Sai Praneeth Prakhya <sai.praneeth.prakhya@intel.com>
    Cc: Sedat Dilek <sedat.dilek@gmail.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: YiFei Zhu <zhuyifei1999@gmail.com>
    Cc: linux-efi@vger.kernel.org
    Link: http://lkml.kernel.org/r/20181129171230.18699-2-ard.biesheuvel@linaro.orgSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    b84a64fa
eboot.c 23.1 KB