summaryrefslogtreecommitdiff
path: root/tpm.c
diff options
context:
space:
mode:
Diffstat (limited to 'tpm.c')
-rw-r--r--tpm.c44
1 files changed, 31 insertions, 13 deletions
diff --git a/tpm.c b/tpm.c
index 99486b10..2ca58454 100644
--- a/tpm.c
+++ b/tpm.c
@@ -35,29 +35,41 @@ static BOOLEAN tpm_present(efi_tpm_protocol_t *tpm)
return TRUE;
}
-static BOOLEAN tpm2_present(efi_tpm2_protocol_t *tpm)
+static EFI_STATUS tpm2_get_caps(efi_tpm2_protocol_t *tpm,
+ EFI_TCG2_BOOT_SERVICE_CAPABILITY *caps,
+ BOOLEAN *old_caps)
{
EFI_STATUS status;
- EFI_TCG2_BOOT_SERVICE_CAPABILITY caps;
- TREE_BOOT_SERVICE_CAPABILITY *caps_1_0;
- caps.Size = (UINT8)sizeof(caps);
+ caps->Size = (UINT8)sizeof(*caps);
- status = uefi_call_wrapper(tpm->get_capability, 2, tpm, &caps);
+ status = uefi_call_wrapper(tpm->get_capability, 2, tpm, caps);
if (status != EFI_SUCCESS)
- return FALSE;
+ return status;
+
+ if (caps->StructureVersion.Major == 1 &&
+ caps->StructureVersion.Minor == 0)
+ *old_caps = TRUE;
- if (caps.StructureVersion.Major == 1 &&
- caps.StructureVersion.Minor == 0) {
- caps_1_0 = (TREE_BOOT_SERVICE_CAPABILITY *)∩︀
+ return EFI_SUCCESS;
+}
+
+static BOOLEAN tpm2_present(efi_tpm2_protocol_t *tpm,
+ EFI_TCG2_BOOT_SERVICE_CAPABILITY *caps,
+ BOOLEAN old_caps)
+{
+ TREE_BOOT_SERVICE_CAPABILITY *caps_1_0;
+
+ if (old_caps) {
+ caps_1_0 = (TREE_BOOT_SERVICE_CAPABILITY *)caps;
if (caps_1_0->TrEEPresentFlag)
return TRUE;
- } else {
- if (caps.TPMPresentFlag)
- return TRUE;
}
+ if (caps->TPMPresentFlag)
+ return TRUE;
+
return FALSE;
}
@@ -90,9 +102,15 @@ EFI_STATUS tpm_log_event(EFI_PHYSICAL_ADDRESS buf, UINTN size, UINT8 pcr,
status = LibLocateProtocol(&tpm2_guid, (VOID **)&tpm2);
/* TPM 2.0 */
if (status == EFI_SUCCESS) {
+ BOOLEAN old_caps;
EFI_TCG2_EVENT *event;
+ EFI_TCG2_BOOT_SERVICE_CAPABILITY caps;
+
+ status = tpm2_get_caps(tpm2, &caps, &old_caps);
+ if (status != EFI_SUCCESS)
+ return EFI_SUCCESS;
- if (!tpm2_present(tpm2))
+ if (!tpm2_present(tpm2, &caps, old_caps))
return EFI_SUCCESS;
status = trigger_tcg2_final_events_table(tpm2);