Re: [PATCH v2 2/3] efi: call get_event_log before ExitBootServices
On Mon, Sep 18, 2017 at 02:28:45PM +0200, Thiebaud Weksteen wrote: > On Thu, Sep 14, 2017 at 9:02 PM, Jarkko Sakkinen >wrote: > > On Thu, Sep 14, 2017 at 11:48:54AM -0700, Matthew Garrett wrote: > >> On Thu, Sep 14, 2017 at 11:43 AM, Jarkko Sakkinen > >> wrote: > >> > On Mon, Sep 11, 2017 at 12:00:21PM +0200, Thiebaud Weksteen wrote: > >> >> With TPM 2.0 specification, the event logs may only be accessible by > >> >> calling an EFI Boot Service. Modify the EFI stub to copy the log area to > >> >> a new Linux-specific EFI configuration table so it remains accessible > >> >> once booted. > >> >> > >> >> When calling this service, it is possible to specify the expected format > >> >> of the logs: TPM 1.2 (SHA1) or TPM 2.0 ("Crypto Agile"). For now, only > >> >> the > >> >> first format is retrieved. > >> >> > >> >> Signed-off-by: Thiebaud Weksteen > >> > > >> > With a quick skim the code change looks good but I remember from > >> > Matthew's talk that there was this issue that ExitBootServices() would > >> > cause a yet another event? > >> > > >> > I guess you could manually synthetize that event by reading the PCR > >> > values right after ExitBootServices()? > >> > >> I think that would involve breaking SHA1… the information should be > > > > You are absolutely right, was not thinking clearly :-) > > > >> available in the TCG_TREE_FINAL_EVENTS configuration table, so it > >> /should/ just be a matter of merging the events from that into the > >> event log. > > > > Right, it is available through runtime services. Why this isn't part > > of the patch set? > > This is not included yet as this table > (EFI_TCG2_FINAL_EVENTS_TABLE_GUID) relies on the TPM2 format for the > log entries (TCG_PCR_EVENT2, "Crypto Agile"). I first plan to add the > parsing of this log version (ie, efi_retrieve_tpm2_eventlog_2) before > adding the merging of both tables. But these will be separate patch > sets. OK, this should be documented to the commit message to make it clear. linux-integr...@vger.kernel.org is now up and running. I'm still surviving from jetlag etc. so testing might be postponed either near end of the week or next week. Thanks for doing this. This is really important stuff in order to get the Linux TPM 2.0 support feature complete. /Jarkko -- To unsubscribe from this list: send the line "unsubscribe linux-efi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [tpmdd-devel] [PATCH v2 2/3] efi: call get_event_log before ExitBootServices
On 09/18/2017 02:11 PM, Thiebaud Weksteen wrote: > On Thu, Sep 14, 2017 at 12:24 PM, Javier Martinez Canillas >wrote: >> On 09/11/2017 12:00 PM, Thiebaud Weksteen via tpmdd-devel wrote: [snip] >>> + >>> + if (status != EFI_SUCCESS) { >>> + efi_printk(sys_table_arg, >>> +"Unable to allocate memory for event log\n"); >>> + return; >>> + } >> >> If this fails or any previous error that will prevent the event log table + >> logs >> to be allocated, shouldn't tpm_read_log_efi() be notified somehow? Since >> AFAICT >> it will still try to access them even if the EFI allocate_pool did not >> succeed. >> > > The implicit part that covers this case is in > drivers/firmware/efi/efi.c. The match_config_table function will go > through all the installed configuration tables and only fill up the > associated member of the efi structure if it exists. In this case, > .tpm_log will remains at EFI_INVALID_TABLE_ADDR unless > efi_call_early(install_configuration_table, ...) is called. So no > further processing is to be expected should the allocation failed. > I see, missed that. Thanks a lot for the explanation. >>> + */ >>> +int __init efi_tpm_eventlog_init(void) >>> +{ >>> + struct linux_efi_tpm_eventlog *tbl; >>> + unsigned int tbl_size; >>> + >> >> The functions efi_retrieve_tpm2_eventlog_1_2() and tpm_read_log_efi() are >> using >> log_tbl as variable name, so I would use it here too for consistency. >> > > Done. > >>> + if (efi.tpm_log == EFI_INVALID_TABLE_ADDR) >>> + return 0; >>> + >>> + tbl = early_memremap(efi.tpm_log, sizeof(*tbl)); >>> + if (!tbl) { >>> + pr_err("Failed to map TPM Event Log table @ 0x%lx\n", >>> + efi.tpm_log); >>> + return -ENOMEM; >>> + } >>> + >> >> Same question than before, if this fails then the table + logs memory won't >> be >> reserved but tpm_read_log_efi() will still try to access it. I'm not sure >> what >> is the correct way to notify though, maybe setting efi.tpm_log to 0 and then >> in >> tpm_read_log_efi() check efi.tpm_log for 0 or EFI_INVALID_TABLE_ADDR instead? >> > > That's right. To keep it simple, it might be easier to just set > tpm_log to EFI_INVALID_TABLE_ADDR if that happens. Added in the next > version of the patch set. > Right. I wasn't sure if you wanted to distinguish between the two cases, but that is simpler indeed. Best regards, -- Javier Martinez Canillas Software Engineer - Desktop Hardware Enablement Red Hat -- To unsubscribe from this list: send the line "unsubscribe linux-efi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 2/3] efi: call get_event_log before ExitBootServices
On Thu, Sep 14, 2017 at 9:02 PM, Jarkko Sakkinenwrote: > On Thu, Sep 14, 2017 at 11:48:54AM -0700, Matthew Garrett wrote: >> On Thu, Sep 14, 2017 at 11:43 AM, Jarkko Sakkinen >> wrote: >> > On Mon, Sep 11, 2017 at 12:00:21PM +0200, Thiebaud Weksteen wrote: >> >> With TPM 2.0 specification, the event logs may only be accessible by >> >> calling an EFI Boot Service. Modify the EFI stub to copy the log area to >> >> a new Linux-specific EFI configuration table so it remains accessible >> >> once booted. >> >> >> >> When calling this service, it is possible to specify the expected format >> >> of the logs: TPM 1.2 (SHA1) or TPM 2.0 ("Crypto Agile"). For now, only the >> >> first format is retrieved. >> >> >> >> Signed-off-by: Thiebaud Weksteen >> > >> > With a quick skim the code change looks good but I remember from >> > Matthew's talk that there was this issue that ExitBootServices() would >> > cause a yet another event? >> > >> > I guess you could manually synthetize that event by reading the PCR >> > values right after ExitBootServices()? >> >> I think that would involve breaking SHA1… the information should be > > You are absolutely right, was not thinking clearly :-) > >> available in the TCG_TREE_FINAL_EVENTS configuration table, so it >> /should/ just be a matter of merging the events from that into the >> event log. > > Right, it is available through runtime services. Why this isn't part > of the patch set? This is not included yet as this table (EFI_TCG2_FINAL_EVENTS_TABLE_GUID) relies on the TPM2 format for the log entries (TCG_PCR_EVENT2, "Crypto Agile"). I first plan to add the parsing of this log version (ie, efi_retrieve_tpm2_eventlog_2) before adding the merging of both tables. But these will be separate patch sets. > > /Jrakko > > /Jarkko -- To unsubscribe from this list: send the line "unsubscribe linux-efi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [tpmdd-devel] [PATCH v2 2/3] efi: call get_event_log before ExitBootServices
On Thu, Sep 14, 2017 at 12:24 PM, Javier Martinez Canillaswrote: > On 09/11/2017 12:00 PM, Thiebaud Weksteen via tpmdd-devel wrote: >> With TPM 2.0 specification, the event logs may only be accessible by >> calling an EFI Boot Service. Modify the EFI stub to copy the log area to >> a new Linux-specific EFI configuration table so it remains accessible >> once booted. >> >> When calling this service, it is possible to specify the expected format >> of the logs: TPM 1.2 (SHA1) or TPM 2.0 ("Crypto Agile"). For now, only the >> first format is retrieved. >> >> Signed-off-by: Thiebaud Weksteen >> --- > > [snip] > >> +void efi_retrieve_tpm2_eventlog_1_2(efi_system_table_t *sys_table_arg) >> +{ > > [snip] > >> + >> + /* Allocate space for the logs and copy them. */ >> + status = efi_call_early(allocate_pool, EFI_LOADER_DATA, >> + sizeof(*log_tbl) + log_size, >> + (void **) _tbl); >> + >> + if (status != EFI_SUCCESS) { >> + efi_printk(sys_table_arg, >> +"Unable to allocate memory for event log\n"); >> + return; >> + } > > If this fails or any previous error that will prevent the event log table + > logs > to be allocated, shouldn't tpm_read_log_efi() be notified somehow? Since > AFAICT > it will still try to access them even if the EFI allocate_pool did not > succeed. > The implicit part that covers this case is in drivers/firmware/efi/efi.c. The match_config_table function will go through all the installed configuration tables and only fill up the associated member of the efi structure if it exists. In this case, .tpm_log will remains at EFI_INVALID_TABLE_ADDR unless efi_call_early(install_configuration_table, ...) is called. So no further processing is to be expected should the allocation failed. >> + */ >> +int __init efi_tpm_eventlog_init(void) >> +{ >> + struct linux_efi_tpm_eventlog *tbl; >> + unsigned int tbl_size; >> + > > The functions efi_retrieve_tpm2_eventlog_1_2() and tpm_read_log_efi() are > using > log_tbl as variable name, so I would use it here too for consistency. > Done. >> + if (efi.tpm_log == EFI_INVALID_TABLE_ADDR) >> + return 0; >> + >> + tbl = early_memremap(efi.tpm_log, sizeof(*tbl)); >> + if (!tbl) { >> + pr_err("Failed to map TPM Event Log table @ 0x%lx\n", >> + efi.tpm_log); >> + return -ENOMEM; >> + } >> + > > Same question than before, if this fails then the table + logs memory won't be > reserved but tpm_read_log_efi() will still try to access it. I'm not sure what > is the correct way to notify though, maybe setting efi.tpm_log to 0 and then > in > tpm_read_log_efi() check efi.tpm_log for 0 or EFI_INVALID_TABLE_ADDR instead? > That's right. To keep it simple, it might be easier to just set tpm_log to EFI_INVALID_TABLE_ADDR if that happens. Added in the next version of the patch set. >> + tbl_size = sizeof(*tbl) + tbl->size; >> + memblock_reserve(efi.tpm_log, tbl_size); >> + early_memunmap(tbl, sizeof(*tbl)); >> + return 0; > > Best regards, > -- > Javier Martinez Canillas > Software Engineer - Desktop Hardware Enablement > Red Hat -- To unsubscribe from this list: send the line "unsubscribe linux-efi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 2/3] efi: call get_event_log before ExitBootServices
On Thu, Sep 14, 2017 at 12:02:47PM -0700, Jarkko Sakkinen wrote: > On Thu, Sep 14, 2017 at 11:48:54AM -0700, Matthew Garrett wrote: > > On Thu, Sep 14, 2017 at 11:43 AM, Jarkko Sakkinen > >wrote: > > > On Mon, Sep 11, 2017 at 12:00:21PM +0200, Thiebaud Weksteen wrote: > > >> With TPM 2.0 specification, the event logs may only be accessible by > > >> calling an EFI Boot Service. Modify the EFI stub to copy the log area to > > >> a new Linux-specific EFI configuration table so it remains accessible > > >> once booted. > > >> > > >> When calling this service, it is possible to specify the expected format > > >> of the logs: TPM 1.2 (SHA1) or TPM 2.0 ("Crypto Agile"). For now, only > > >> the > > >> first format is retrieved. > > >> > > >> Signed-off-by: Thiebaud Weksteen > > > > > > With a quick skim the code change looks good but I remember from > > > Matthew's talk that there was this issue that ExitBootServices() would > > > cause a yet another event? > > > > > > I guess you could manually synthetize that event by reading the PCR > > > values right after ExitBootServices()? > > > > I think that would involve breaking SHA1… the information should be > > You are absolutely right, was not thinking clearly :-) > > > available in the TCG_TREE_FINAL_EVENTS configuration table, so it > > /should/ just be a matter of merging the events from that into the > > event log. > > Right, it is available through runtime services. Why this isn't part > of the patch set? Anyway, I'll try this out out when I get back to Finland. Still before landing this to mainline I think it would make sense to make it complete wouldn't it? /Jarkko -- To unsubscribe from this list: send the line "unsubscribe linux-efi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 2/3] efi: call get_event_log before ExitBootServices
On Thu, Sep 14, 2017 at 11:48:54AM -0700, Matthew Garrett wrote: > On Thu, Sep 14, 2017 at 11:43 AM, Jarkko Sakkinen >wrote: > > On Mon, Sep 11, 2017 at 12:00:21PM +0200, Thiebaud Weksteen wrote: > >> With TPM 2.0 specification, the event logs may only be accessible by > >> calling an EFI Boot Service. Modify the EFI stub to copy the log area to > >> a new Linux-specific EFI configuration table so it remains accessible > >> once booted. > >> > >> When calling this service, it is possible to specify the expected format > >> of the logs: TPM 1.2 (SHA1) or TPM 2.0 ("Crypto Agile"). For now, only the > >> first format is retrieved. > >> > >> Signed-off-by: Thiebaud Weksteen > > > > With a quick skim the code change looks good but I remember from > > Matthew's talk that there was this issue that ExitBootServices() would > > cause a yet another event? > > > > I guess you could manually synthetize that event by reading the PCR > > values right after ExitBootServices()? > > I think that would involve breaking SHA1… the information should be You are absolutely right, was not thinking clearly :-) > available in the TCG_TREE_FINAL_EVENTS configuration table, so it > /should/ just be a matter of merging the events from that into the > event log. Right, it is available through runtime services. Why this isn't part of the patch set? /Jrakko /Jarkko -- To unsubscribe from this list: send the line "unsubscribe linux-efi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 2/3] efi: call get_event_log before ExitBootServices
On Thu, Sep 14, 2017 at 11:43 AM, Jarkko Sakkinenwrote: > On Mon, Sep 11, 2017 at 12:00:21PM +0200, Thiebaud Weksteen wrote: >> With TPM 2.0 specification, the event logs may only be accessible by >> calling an EFI Boot Service. Modify the EFI stub to copy the log area to >> a new Linux-specific EFI configuration table so it remains accessible >> once booted. >> >> When calling this service, it is possible to specify the expected format >> of the logs: TPM 1.2 (SHA1) or TPM 2.0 ("Crypto Agile"). For now, only the >> first format is retrieved. >> >> Signed-off-by: Thiebaud Weksteen > > With a quick skim the code change looks good but I remember from > Matthew's talk that there was this issue that ExitBootServices() would > cause a yet another event? > > I guess you could manually synthetize that event by reading the PCR > values right after ExitBootServices()? I think that would involve breaking SHA1… the information should be available in the TCG_TREE_FINAL_EVENTS configuration table, so it /should/ just be a matter of merging the events from that into the event log. -- To unsubscribe from this list: send the line "unsubscribe linux-efi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 2/3] efi: call get_event_log before ExitBootServices
On Mon, Sep 11, 2017 at 12:00:21PM +0200, Thiebaud Weksteen wrote: > With TPM 2.0 specification, the event logs may only be accessible by > calling an EFI Boot Service. Modify the EFI stub to copy the log area to > a new Linux-specific EFI configuration table so it remains accessible > once booted. > > When calling this service, it is possible to specify the expected format > of the logs: TPM 1.2 (SHA1) or TPM 2.0 ("Crypto Agile"). For now, only the > first format is retrieved. > > Signed-off-by: Thiebaud WeksteenWith a quick skim the code change looks good but I remember from Matthew's talk that there was this issue that ExitBootServices() would cause a yet another event? I guess you could manually synthetize that event by reading the PCR values right after ExitBootServices()? Anyway, great work, thanks for making this effort. /Jarkko -- To unsubscribe from this list: send the line "unsubscribe linux-efi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [tpmdd-devel] [PATCH v2 2/3] efi: call get_event_log before ExitBootServices
On 09/11/2017 12:00 PM, Thiebaud Weksteen via tpmdd-devel wrote: > With TPM 2.0 specification, the event logs may only be accessible by > calling an EFI Boot Service. Modify the EFI stub to copy the log area to > a new Linux-specific EFI configuration table so it remains accessible > once booted. > > When calling this service, it is possible to specify the expected format > of the logs: TPM 1.2 (SHA1) or TPM 2.0 ("Crypto Agile"). For now, only the > first format is retrieved. > > Signed-off-by: Thiebaud Weksteen> --- [snip] > +void efi_retrieve_tpm2_eventlog_1_2(efi_system_table_t *sys_table_arg) > +{ [snip] > + > + /* Allocate space for the logs and copy them. */ > + status = efi_call_early(allocate_pool, EFI_LOADER_DATA, > + sizeof(*log_tbl) + log_size, > + (void **) _tbl); > + > + if (status != EFI_SUCCESS) { > + efi_printk(sys_table_arg, > +"Unable to allocate memory for event log\n"); > + return; > + } If this fails or any previous error that will prevent the event log table + logs to be allocated, shouldn't tpm_read_log_efi() be notified somehow? Since AFAICT it will still try to access them even if the EFI allocate_pool did not succeed. > + */ > +int __init efi_tpm_eventlog_init(void) > +{ > + struct linux_efi_tpm_eventlog *tbl; > + unsigned int tbl_size; > + The functions efi_retrieve_tpm2_eventlog_1_2() and tpm_read_log_efi() are using log_tbl as variable name, so I would use it here too for consistency. > + if (efi.tpm_log == EFI_INVALID_TABLE_ADDR) > + return 0; > + > + tbl = early_memremap(efi.tpm_log, sizeof(*tbl)); > + if (!tbl) { > + pr_err("Failed to map TPM Event Log table @ 0x%lx\n", > + efi.tpm_log); > + return -ENOMEM; > + } > + Same question than before, if this fails then the table + logs memory won't be reserved but tpm_read_log_efi() will still try to access it. I'm not sure what is the correct way to notify though, maybe setting efi.tpm_log to 0 and then in tpm_read_log_efi() check efi.tpm_log for 0 or EFI_INVALID_TABLE_ADDR instead? > + tbl_size = sizeof(*tbl) + tbl->size; > + memblock_reserve(efi.tpm_log, tbl_size); > + early_memunmap(tbl, sizeof(*tbl)); > + return 0; Best regards, -- Javier Martinez Canillas Software Engineer - Desktop Hardware Enablement Red Hat -- To unsubscribe from this list: send the line "unsubscribe linux-efi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH v2 2/3] efi: call get_event_log before ExitBootServices
With TPM 2.0 specification, the event logs may only be accessible by calling an EFI Boot Service. Modify the EFI stub to copy the log area to a new Linux-specific EFI configuration table so it remains accessible once booted. When calling this service, it is possible to specify the expected format of the logs: TPM 1.2 (SHA1) or TPM 2.0 ("Crypto Agile"). For now, only the first format is retrieved. Signed-off-by: Thiebaud Weksteen--- arch/x86/boot/compressed/eboot.c | 1 + drivers/firmware/efi/Makefile | 2 +- drivers/firmware/efi/efi.c| 2 + drivers/firmware/efi/libstub/Makefile | 3 +- drivers/firmware/efi/libstub/tpm.c| 81 +++ drivers/firmware/efi/tpm.c| 39 + include/linux/efi.h | 49 + 7 files changed, 174 insertions(+), 3 deletions(-) create mode 100644 drivers/firmware/efi/tpm.c diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c index a1686f3dc295..ef6abe8b3788 100644 --- a/arch/x86/boot/compressed/eboot.c +++ b/arch/x86/boot/compressed/eboot.c @@ -999,6 +999,7 @@ struct boot_params *efi_main(struct efi_config *c, /* Ask the firmware to clear memory on unclean shutdown */ efi_enable_reset_attack_mitigation(sys_table); + efi_retrieve_tpm2_eventlog(sys_table); setup_graphics(boot_params); diff --git a/drivers/firmware/efi/Makefile b/drivers/firmware/efi/Makefile index 0329d319d89a..2f074b5cde87 100644 --- a/drivers/firmware/efi/Makefile +++ b/drivers/firmware/efi/Makefile @@ -10,7 +10,7 @@ KASAN_SANITIZE_runtime-wrappers.o := n obj-$(CONFIG_ACPI_BGRT)+= efi-bgrt.o -obj-$(CONFIG_EFI) += efi.o vars.o reboot.o memattr.o +obj-$(CONFIG_EFI) += efi.o vars.o reboot.o memattr.o tpm.o obj-$(CONFIG_EFI) += capsule.o memmap.o obj-$(CONFIG_EFI_VARS) += efivars.o obj-$(CONFIG_EFI_ESRT) += esrt.o diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c index f97f272e16ee..03fbaf8eb248 100644 --- a/drivers/firmware/efi/efi.c +++ b/drivers/firmware/efi/efi.c @@ -532,6 +532,8 @@ int __init efi_config_parse_tables(void *config_tables, int count, int sz, if (efi_enabled(EFI_MEMMAP)) efi_memattr_init(); + efi_tpm_eventlog_init(); + /* Parse the EFI Properties table if it exists */ if (efi.properties_table != EFI_INVALID_TABLE_ADDR) { efi_properties_table_t *tbl; diff --git a/drivers/firmware/efi/libstub/Makefile b/drivers/firmware/efi/libstub/Makefile index dedf9bde44db..2abe6d22dc5f 100644 --- a/drivers/firmware/efi/libstub/Makefile +++ b/drivers/firmware/efi/libstub/Makefile @@ -29,8 +29,7 @@ OBJECT_FILES_NON_STANDARD := y # Prevents link failures: __sanitizer_cov_trace_pc() is not linked in. KCOV_INSTRUMENT:= n -lib-y := efi-stub-helper.o gop.o secureboot.o -lib-$(CONFIG_RESET_ATTACK_MITIGATION) += tpm.o +lib-y := efi-stub-helper.o gop.o secureboot.o tpm.o # include the stub's generic dependencies from lib/ when building for ARM/arm64 arm-deps := fdt_rw.c fdt_ro.c fdt_wip.c fdt.c fdt_empty_tree.c fdt_sw.c sort.c diff --git a/drivers/firmware/efi/libstub/tpm.c b/drivers/firmware/efi/libstub/tpm.c index 6224cdbc9669..da661bf8cb96 100644 --- a/drivers/firmware/efi/libstub/tpm.c +++ b/drivers/firmware/efi/libstub/tpm.c @@ -4,15 +4,18 @@ * Copyright (C) 2016 CoreOS, Inc * Copyright (C) 2017 Google, Inc. * Matthew Garrett + * Thiebaud Weksteen * * This file is part of the Linux kernel, and is made available under the * terms of the GNU General Public License version 2. */ #include +#include #include #include "efistub.h" +#ifdef CONFIG_RESET_ATTACK_MITIGATION static const efi_char16_t efi_MemoryOverWriteRequest_name[] = { 'M', 'e', 'm', 'o', 'r', 'y', 'O', 'v', 'e', 'r', 'w', 'r', 'i', 't', 'e', 'R', 'e', 'q', 'u', 'e', 's', 't', 'C', 'o', 'n', 't', 'r', 'o', @@ -56,3 +59,81 @@ void efi_enable_reset_attack_mitigation(efi_system_table_t *sys_table_arg) EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS, sizeof(val), ); } + +#endif + +void efi_retrieve_tpm2_eventlog_1_2(efi_system_table_t *sys_table_arg) +{ + efi_guid_t tcg2_guid = EFI_TCG2_PROTOCOL_GUID; + efi_guid_t linux_eventlog_guid = LINUX_EFI_TPM_EVENT_LOG_GUID; + efi_status_t status; + efi_physical_addr_t log_location, log_last_entry; + struct linux_efi_tpm_eventlog *log_tbl; + unsigned long first_entry_addr, last_entry_addr; + size_t log_size, last_entry_size; + efi_bool_t truncated; + void *tcg2_protocol; + + status = efi_call_early(locate_protocol, _guid, NULL, +