• Ard Biesheuvel's avatar
    efi: Add nonblocking option to efi_query_variable_store() · ca0e30dc
    Ard Biesheuvel authored
    The function efi_query_variable_store() may be invoked by
    efivar_entry_set_nonblocking(), which itself takes care to only
    call a non-blocking version of the SetVariable() runtime
    wrapper. However, efi_query_variable_store() may call the
    SetVariable() wrapper directly, as well as the wrapper for
    QueryVariableInfo(), both of which could deadlock in the same
    way we are trying to prevent by calling
    efivar_entry_set_nonblocking() in the first place.
    So instead, modify efi_query_variable_store() to use the
    non-blocking variants of QueryVariableInfo() (and give up rather
    than free up space if the available space is below
    EFI_MIN_RESERVE) if invoked with the 'nonblocking' argument set
    to true.
    Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: default avatarMatt Fleming <matt@codeblueprint.co.uk>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: linux-efi@vger.kernel.org
    Link: http://lkml.kernel.org/r/1454364428-494-5-git-send-email-matt@codeblueprint.co.uk
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>