• Ard Biesheuvel's avatar
    efi: tpm: Avoid READ_ONCE() for accessing the event log · d3f45053
    Ard Biesheuvel authored
    Nathan reports that recent kernels built with LTO will crash when doing
    EFI boot using Fedora's GRUB and SHIM. The culprit turns out to be a
    misaligned load from the TPM event log, which is annotated with
    READ_ONCE(), and under LTO, this gets translated into a LDAR instruction
    which does not tolerate misaligned accesses.
    
    Interestingly, this does not happen when booting the same kernel
    straight from the UEFI shell, and so the fact that the event log may
    appear misaligned in memory may be caused by a bug in GRUB or SHIM.
    
    However, using READ_ONCE() to access firmware tables is slightly unusual
    in any case, and here, we only need to ensure that 'event' is not
    dereferenced again after it gets unmapped, but this is already taken
    care of by the implicit barrier() semantics of the early_memunmap()
    call.
    
    Cc: <stable@vger.kernel.org>
    Cc: Peter Jones <pjones@redhat.com>
    Cc: Jarkko Sakkinen <jarkko@kernel.org>
    Cc: Matthew Garrett <mjg59@srcf.ucam.org>
    Reported-by: default avatarNathan Chancellor <nathan@kernel.org>
    Tested-by: default avatarNathan Chancellor <nathan@kernel.org>
    Link: https://github.com/ClangBuiltLinux/linux/issues/1782Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
    d3f45053
tpm_eventlog.h 6.53 KB