• Ard Biesheuvel's avatar
    efi/x86: avoid KASAN false positives when accessing the 1: 1 mapping · 3cc02861
    Ard Biesheuvel authored
    When installing the EFI virtual address map during early boot, we
    access the EFI system table to retrieve the 1:1 mapped address of
    the SetVirtualAddressMap() EFI runtime service. This memory is not
    known to KASAN, so on KASAN enabled builds, this may result in a
    splat like
    
      ==================================================================
      BUG: KASAN: user-memory-access in efi_set_virtual_address_map+0x141/0x354
      Read of size 4 at addr 000000003fbeef38 by task swapper/0/0
    
      CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.5.0-rc5+ #758
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015
      Call Trace:
       dump_stack+0x8b/0xbb
       ? efi_set_virtual_address_map+0x141/0x354
       ? efi_set_virtual_address_map+0x141/0x354
       __kasan_report+0x176/0x192
       ? efi_set_virtual_address_map+0x141/0x354
       kasan_report+0xe/0x20
       efi_set_virtual_address_map+0x141/0x354
       ? efi_thunk_runtime_setup+0x148/0x148
       ? __inc_numa_state+0x19/0x90
       ? memcpy+0x34/0x50
       efi_enter_virtual_mode+0x5fd/0x67d
       start_kernel+0x5cd/0x682
       ? mem_encrypt_init+0x6/0x6
       ? x86_family+0x5/0x20
       ? load_ucode_bsp+0x46/0x154
       secondary_startup_64+0xa4/0xb0
      ==================================================================
    
    Since this code runs only a single time during early boot, let's annotate
    it as __no_sanitize_address so KASAN disregards it entirely.
    
    Fixes: 69829470 ("efi/x86: Split SetVirtualAddresMap() wrappers into ...")
    Reported-by: default avatarQian Cai <cai@lca.pw>
    Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    3cc02861
efi_64.c 24 KB