summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRenaud Métrich <rmetrich@redhat.com>2021-09-08 14:02:07 +0200
committerPeter Jones <pjones@redhat.com>2021-09-13 15:02:13 -0400
commit11740ea761ac5a1eb84c865edbdcd750f2a8b04f (patch)
treee2a9d48fc6e0180dccf19b66fe15119ac3d70149
parent26998367eb6153cd24b6e82949d5f7874a036372 (diff)
downloadefi-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.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/tpm.c b/tpm.c
index 5af5f173..41f36651 100644
--- a/tpm.c
+++ b/tpm.c
@@ -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;
}