• Omar Sandoval's avatar
    x86/efi: Don't try to reserve runtime regions · 6f6266a5
    Omar Sandoval authored
    Reserving a runtime region results in splitting the EFI memory
    descriptors for the runtime region. This results in runtime region
    descriptors with bogus memory mappings, leading to interesting crashes
    like the following during a kexec:
      general protection fault: 0000 [#1] SMP
      Modules linked in:
      CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.11.0-rc1 #53
      Hardware name: Wiwynn Leopard-Orv2/Leopard-DDR BW, BIOS LBM05   09/30/2016
      RIP: 0010:virt_efi_set_variable()
      Call Trace:
       ? set_init_arg()
      Kernel panic - not syncing: Fatal exception
    Runtime regions will not be freed and do not need to be reserved, so
    skip the memmap modification in this case.
    Signed-off-by: default avatarOmar Sandoval <osandov@fb.com>
    Signed-off-by: default avatarMatt Fleming <matt@codeblueprint.co.uk>
    Cc: <stable@vger.kernel.org> # v4.9+
    Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Cc: Dave Young <dyoung@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Jones <pjones@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: linux-efi@vger.kernel.org
    Fixes: 8e80632f ("efi/esrt: Use efi_mem_reserve() and avoid a kmalloc()")
    Link: http://lkml.kernel.org/r/20170412152719.9779-2-matt@codeblueprint.co.uk
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>