• Ard Biesheuvel's avatar
    efi: Mark all EFI runtime services as unsupported on non-EFI boot · 3e03dca5
    Ard Biesheuvel authored
    Recent changes to the way we deal with EFI runtime services that
    are marked as unsupported by the firmware resulted in a regression
    for non-EFI boot. The problem is that all EFI runtime services are
    marked as available by default, and any non-NULL checks on the EFI
    service function pointers (which will be non-NULL even for runtime
    services that are unsupported on an EFI boot) were replaced with
    checks against the mask stored in efi.runtime_supported_mask.
    
    When doing a non-EFI boot, this check against the mask will return
    a false positive, given the fact that all runtime services are
    marked as enabled by default. Since we dropped the non-NULL check
    of the runtime service function pointer in favor of the mask check,
    we will now unconditionally dereference the function pointer, even
    if it is NULL, and go boom.
    
    So let's ensure that the mask reflects reality on a non-EFI boot,
    which is that all EFI runtime services are unsupported.
    Reported-by: default avatarDavid Hildenbrand <david@redhat.com>
    Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    Cc: linux-efi@vger.kernel.org
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Heinrich Schuchardt <xypron.glpk@gmx.de>
    Cc: Tom Lendacky <thomas.lendacky@amd.com>
    Link: https://lore.kernel.org/r/20200228121408.9075-7-ardb@kernel.org
    3e03dca5
efi.c 23.8 KB