diff options
| author | Renaud Métrich <rmetrich@redhat.com> | 2021-09-08 14:02:07 +0200 |
|---|---|---|
| committer | Peter Jones <pjones@redhat.com> | 2021-09-13 15:02:13 -0400 |
| commit | 11740ea761ac5a1eb84c865edbdcd750f2a8b04f (patch) | |
| tree | e2a9d48fc6e0180dccf19b66fe15119ac3d70149 | |
| parent | 26998367eb6153cd24b6e82949d5f7874a036372 (diff) | |
| download | efi-boot-shim-11740ea761ac5a1eb84c865edbdcd750f2a8b04f.tar.gz efi-boot-shim-11740ea761ac5a1eb84c865edbdcd750f2a8b04f.zip | |
Don't make shim abort when TPM log event fails (RHBZ #2002265)
On Dell hardware booted in UEFI with option TPM 1.2 "On without Pre-Boot
Measurements", it appears that `tpm_log_event()` fails with Unsupported,
which causes Shim to abort due to believing it couldn't set up the
MokListRT, MokListXRT and SbatLevelRT variables.
This patch ignore the error when trying to write to the TPM and sets the
TPM as 'defective' to not try to write to it anymore.
Signed-off-by: Renaud Métrich <rmetrich@redhat.com>
| -rw-r--r-- | tpm.c | 10 |
1 files changed, 10 insertions, 0 deletions
@@ -10,6 +10,7 @@ typedef struct { UINTN measuredcount = 0; VARIABLE_RECORD *measureddata = NULL; +static BOOLEAN tpm_defective = FALSE; static BOOLEAN tpm_present(efi_tpm_protocol_t *tpm) { @@ -18,6 +19,9 @@ static BOOLEAN tpm_present(efi_tpm_protocol_t *tpm) UINT32 flags; EFI_PHYSICAL_ADDRESS eventlog, lastevent; + if (tpm_defective) + return FALSE; + caps.Size = (UINT8)sizeof(caps); efi_status = tpm->status_check(tpm, &caps, &flags, &eventlog, &lastevent); @@ -192,6 +196,12 @@ static EFI_STATUS tpm_log_event_raw(EFI_PHYSICAL_ADDRESS buf, UINTN size, (UINT64)size, TPM_ALG_SHA, event, &eventnum, &lastevent); } + if (efi_status == EFI_UNSUPPORTED) { + perror(L"Could not write TPM event: %r. Considering " + "the TPM as defective.\n", efi_status); + tpm_defective = TRUE; + efi_status = EFI_SUCCESS; + } FreePool(event); return efi_status; } |
