Skip to content
  • Sai Praneeth Prakhya's avatar
    x86/mm/pageattr: Introduce helper function to unmap EFI boot services · 7e0dabd3
    Sai Praneeth Prakhya authored
    
    
    Ideally, after kernel assumes control of the platform, firmware
    shouldn't access EFI boot services code/data regions. But, it's noticed
    that this is not so true in many x86 platforms. Hence, during boot,
    kernel reserves EFI boot services code/data regions [1] and maps [2]
    them to efi_pgd so that call to set_virtual_address_map() doesn't fail.
    After returning from set_virtual_address_map(), kernel frees the
    reserved regions [3] but they still remain mapped. Hence, introduce
    kernel_unmap_pages_in_pgd() which will later be used to unmap EFI boot
    services code/data regions.
    
    While at it modify kernel_map_pages_in_pgd() by:
    
    1. Adding __init modifier because it's always used *only* during boot.
    2. Add a warning if it's used after SMP is initialized because it uses
       __flush_tlb_all() which flushes mappings only on current CPU.
    
    Unmapping EFI boot services code/data regions will result in clearing
    PAGE_PRESENT bit and it shouldn't bother L1TF cases because it's already
    handled by protnone_mask() at arch/x86/include/asm/pgtable-invert.h.
    
    [1] efi_reserve_boot_services()
    [2] efi_map_region() -> __map_region() -> kernel_map_pages_in_pgd()
    [3] efi_free_boot_services()
    
    Signed-off-by: default avatarSai Praneeth Prakhya <sai.praneeth.prakhya@intel.com>
    Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    Reviewed-by: default avatarThomas Gleixner <tglx@linutronix.de>
    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: Eric Snowberg <eric.snowberg@oracle.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: Sedat Dilek <sedat.dilek@gmail.com>
    Cc: YiFei Zhu <zhuyifei1999@gmail.com>
    Cc: linux-efi@vger.kernel.org
    Link: http://lkml.kernel.org/r/20181129171230.18699-5-ard.biesheuvel@linaro.org
    
    
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    7e0dabd3