• Matt Fleming's avatar
    x86/efi: Prevent mixed mode boot corruption with CONFIG_VMAP_STACK=y · f6697df3
    Matt Fleming authored
    Booting an EFI mixed mode kernel has been crashing since commit:
    
      e37e43a4 ("x86/mm/64: Enable vmapped stacks (CONFIG_HAVE_ARCH_VMAP_STACK=y)")
    
    The user-visible effect in my test setup was the kernel being unable
    to find the root file system ramdisk. This was likely caused by silent
    memory or page table corruption.
    
    Enabling CONFIG_DEBUG_VIRTUAL=y immediately flagged the thunking code as
    abusing virt_to_phys() because it was passing addresses that were not
    part of the kernel direct mapping.
    
    Use the slow version instead, which correctly handles all memory
    regions by performing a page table walk.
    Suggested-by: default avatarAndy Lutomirski <luto@amacapital.net>
    Signed-off-by: default avatarMatt Fleming <matt@codeblueprint.co.uk>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: linux-efi@vger.kernel.org
    Link: http://lkml.kernel.org/r/20161112210424.5157-3-matt@codeblueprint.co.ukSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    f6697df3
efi_64.c 18.1 KB