• Borislav Petkov's avatar
    efi/mokvar: Reserve the table only if it is in boot services data · 47e1e233
    Borislav Petkov authored
    One of the SUSE QA tests triggered:
    
      localhost kernel: efi: Failed to lookup EFI memory descriptor for 0x000000003dcf8000
    
    which comes from x86's version of efi_arch_mem_reserve() trying to
    reserve a memory region. Usually, that function expects
    EFI_BOOT_SERVICES_DATA memory descriptors but the above case is for the
    MOKvar table which is allocated in the EFI shim as runtime services.
    
    That lead to a fix changing the allocation of that table to boot services.
    
    However, that fix broke booting SEV guests with that shim leading to
    this kernel fix
    
      8d651ee9 ("x86/ioremap: Map EFI-reserved memory as encrypted for SEV")
    
    which extended the ioremap hint to map reserved EFI boot services as
    decrypted too.
    
    However, all that wasn't needed, IMO, because that error message in
    efi_arch_mem_reserve() was innocuous in this case - if the MOKvar table
    is not in boot services, then it doesn't need to be reserved in the
    first place because it is, well, in runtime services which *should* be
    reserved anyway.
    
    So do that reservation for the MOKvar table only if it is allocated
    in boot services data. I couldn't find any requirement about where
    that table should be allocated in, unlike the ESRT which allocation is
    mandated to be done in boot services data by the UEFI spec.
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
    47e1e233
mokvar-table.c 10.6 KB