• Ard Biesheuvel's avatar
    efi/x86: Ignore the memory attributes table on i386 · dd09fad9
    Ard Biesheuvel authored
    Commit:
    
      3a6b6c6f ("efi: Make EFI_MEMORY_ATTRIBUTES_TABLE initialization common across all architectures")
    
    moved the call to efi_memattr_init() from ARM specific to the generic
    EFI init code, in order to be able to apply the restricted permissions
    described in that table on x86 as well.
    
    We never enabled this feature fully on i386, and so mapping and
    reserving this table is pointless. However, due to the early call to
    memblock_reserve(), the memory bookkeeping gets confused to the point
    where it produces the splat below when we try to map the memory later
    on:
    
      ------------[ cut here ]------------
      ioremap on RAM at 0x3f251000 - 0x3fa1afff
      WARNING: CPU: 0 PID: 0 at arch/x86/mm/ioremap.c:166 __ioremap_caller ...
      Modules linked in:
      CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.20.0 #48
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 0.0.0 02/06/2015
      EIP: __ioremap_caller.constprop.0+0x249/0x260
      Code: 90 0f b7 05 4e 38 40 de 09 45 e0 e9 09 ff ff ff 90 8d 45 ec c6 05 ...
      EAX: 00000029 EBX: 00000000 ECX: de59c228 EDX: 00000001
      ESI: 3f250fff EDI: 00000000 EBP: de3edf20 ESP: de3edee0
      DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 EFLAGS: 00200296
      CR0: 80050033 CR2: ffd17000 CR3: 1e58c000 CR4: 00040690
      Call Trace:
       ioremap_cache+0xd/0x10
       ? old_map_region+0x72/0x9d
       old_map_region+0x72/0x9d
       efi_map_region+0x8/0xa
       efi_enter_virtual_mode+0x260/0x43b
       start_kernel+0x329/0x3aa
       i386_start_kernel+0xa7/0xab
       startup_32_smp+0x164/0x168
      ---[ end trace e15ccf6b9f356833 ]---
    
    Let's work around this by disregarding the memory attributes table
    altogether on i386, which does not result in a loss of functionality
    or protection, given that we never consumed the contents.
    
    Fixes: 3a6b6c6f ("efi: Make EFI_MEMORY_ATTRIBUTES_TABLE ... ")
    Tested-by: default avatarArvind Sankar <nivedita@alum.mit.edu>
    Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    Link: https://lore.kernel.org/r/20200304165917.5893-1-ardb@kernel.org
    Link: https://lore.kernel.org/r/20200308080859.21568-21-ardb@kernel.org
    dd09fad9
efi.c 25.2 KB