Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:dirkmueller:Factory
grub2
0001-tpm-Log-EFI_VOLUME_FULL-and-continue.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0001-tpm-Log-EFI_VOLUME_FULL-and-continue.patch of Package grub2
From 8c9f7cefdf9d03cae65773ef35e103fc346ee17f Mon Sep 17 00:00:00 2001 From: Michael Chang <mchang@suse.com> Date: Tue, 3 May 2022 12:38:34 +0800 Subject: [PATCH] tpm: Log EFI_VOLUME_FULL and continue Appending entries to tpm event log would fail if it is full and in this case EFI_VOLUME_FULL is returned. Since the measurement itself is successful but only the event is not logged, the booting shouldn't be forced to stop and instead grub should log the error and continue. All errors other than EFI_VOLUME_FULL remains to stop grub from booting so the failure can be examined. In case of unknown tpm error, the return code from efi firmware is also displayed for reference. Signed-off-by: Michael Chang <mchang@suse.com> --- grub-core/commands/efi/tpm.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/grub-core/commands/efi/tpm.c b/grub-core/commands/efi/tpm.c index a97d85368a..98fd5892b0 100644 --- a/grub-core/commands/efi/tpm.c +++ b/grub-core/commands/efi/tpm.c @@ -144,8 +144,10 @@ grub_efi_log_event_status (grub_efi_status_t status) return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("Output buffer too small")); case GRUB_EFI_NOT_FOUND: return grub_error (GRUB_ERR_UNKNOWN_DEVICE, N_("TPM unavailable")); + case GRUB_EFI_VOLUME_FULL: + return grub_error (GRUB_ERR_OUT_OF_RANGE, N_("TPM event log is full")); default: - return grub_error (GRUB_ERR_UNKNOWN_DEVICE, N_("Unknown TPM error")); + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, N_("Unknown TPM error: %" PRIuGRUB_SIZE), status); } } @@ -159,6 +161,7 @@ grub_tpm1_log_event (grub_efi_handle_t tpm_handle, unsigned char *buf, grub_efi_tpm_protocol_t *tpm; grub_efi_physical_address_t lastevent; grub_uint32_t algorithm; + grub_err_t err; grub_uint32_t eventnum = 0; tpm = grub_efi_open_protocol (tpm_handle, &tpm_guid, @@ -182,7 +185,12 @@ grub_tpm1_log_event (grub_efi_handle_t tpm_handle, unsigned char *buf, algorithm, event, &eventnum, &lastevent); grub_free (event); - return grub_efi_log_event_status (status); + err = grub_efi_log_event_status (status); + /* Log EFI_VOLUME_FULL and continue */ + if (err == GRUB_ERR_OUT_OF_RANGE) + grub_print_error (); + + return err; } static grub_err_t @@ -193,6 +201,7 @@ grub_tpm2_log_event (grub_efi_handle_t tpm_handle, unsigned char *buf, EFI_TCG2_EVENT *event; grub_efi_status_t status; grub_efi_tpm2_protocol_t *tpm; + grub_err_t err; tpm = grub_efi_open_protocol (tpm_handle, &tpm2_guid, GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); @@ -218,7 +227,12 @@ grub_tpm2_log_event (grub_efi_handle_t tpm_handle, unsigned char *buf, (grub_uint64_t) size, event); grub_free (event); - return grub_efi_log_event_status (status); + err = grub_efi_log_event_status (status); + /* Log EFI_VOLUME_FULL and continue */ + if (err == GRUB_ERR_OUT_OF_RANGE) + grub_print_error (); + + return err; } grub_err_t -- 2.34.1
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor