• Ard Biesheuvel's avatar
    efi/efivars: Expose RT service availability via efivars abstraction · f88814cc
    Ard Biesheuvel authored
    Commit
    
      bf67fad1 ("efi: Use more granular check for availability for variable services")
    
    introduced a check into the efivarfs, efi-pstore and other drivers that
    aborts loading of the module if not all three variable runtime services
    (GetVariable, SetVariable and GetNextVariable) are supported. However, this
    results in efivarfs being unavailable entirely if only SetVariable support
    is missing, which is only needed if you want to make any modifications.
    Also, efi-pstore and the sysfs EFI variable interface could be backed by
    another implementation of the 'efivars' abstraction, in which case it is
    completely irrelevant which services are supported by the EFI firmware.
    
    So make the generic 'efivars' abstraction dependent on the availibility of
    the GetVariable and GetNextVariable EFI runtime services, and add a helper
    'efivar_supports_writes()' to find out whether the currently active efivars
    abstraction supports writes (and wire it up to the availability of
    SetVariable for the generic one).
    
    Then, use the efivar_supports_writes() helper to decide whether to permit
    efivarfs to be mounted read-write, and whether to enable efi-pstore or the
    sysfs EFI variable interface altogether.
    
    Fixes: bf67fad1 ("efi: Use more granular check for availability for variable services")
    Reported-by: default avatarHeinrich Schuchardt <xypron.glpk@gmx.de>
    Acked-by: default avatarIlias Apalodimas <ilias.apalodimas@linaro.org>
    Tested-by: default avatarIlias Apalodimas <ilias.apalodimas@linaro.org>
    Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
    f88814cc
efi.c 25.3 KB