Skip to content

Commit 7f980c7

Browse files
committed
protos/limine: Capture TPM event log after all PCR extends
1 parent 49c4f14 commit 7f980c7

1 file changed

Lines changed: 27 additions & 25 deletions

File tree

common/protos/limine.c

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1146,31 +1146,6 @@ FEAT_START
11461146

11471147
est_request->response = reported_addr(est_response);
11481148
FEAT_END
1149-
1150-
// TPM event log feature
1151-
FEAT_START
1152-
struct limine_tpm_event_log_request *tpm_event_log_request = get_request(LIMINE_TPM_EVENT_LOG_REQUEST_ID);
1153-
if (tpm_event_log_request == NULL) {
1154-
break; // next feature
1155-
}
1156-
1157-
uint32_t tpm_event_log_format;
1158-
void *tpm_event_log_addr;
1159-
size_t tpm_event_log_size;
1160-
if (!tpm_get_event_log(&tpm_event_log_format, &tpm_event_log_addr, &tpm_event_log_size)) {
1161-
break; // no TPM or capture failed
1162-
}
1163-
1164-
struct limine_tpm_event_log_response *tpm_event_log_response =
1165-
ext_mem_alloc(sizeof(struct limine_tpm_event_log_response));
1166-
1167-
tpm_event_log_response->format = tpm_event_log_format;
1168-
tpm_event_log_response->size = tpm_event_log_size;
1169-
tpm_event_log_response->address = tpm_event_log_size > 0
1170-
? reported_addr(tpm_event_log_addr) : 0;
1171-
1172-
tpm_event_log_request->response = reported_addr(tpm_event_log_response);
1173-
FEAT_END
11741149
#endif
11751150

11761151
// Device tree blob feature
@@ -1712,6 +1687,33 @@ FEAT_START
17121687
FEAT_END
17131688

17141689
#if defined (UEFI)
1690+
// TPM event log feature. Processed last so GetEventLog snapshots a log
1691+
// containing all of Limine's extends; later extends would land in the
1692+
// final-events table instead.
1693+
FEAT_START
1694+
struct limine_tpm_event_log_request *tpm_event_log_request = get_request(LIMINE_TPM_EVENT_LOG_REQUEST_ID);
1695+
if (tpm_event_log_request == NULL) {
1696+
break; // next feature
1697+
}
1698+
1699+
uint32_t tpm_event_log_format;
1700+
void *tpm_event_log_addr;
1701+
size_t tpm_event_log_size;
1702+
if (!tpm_get_event_log(&tpm_event_log_format, &tpm_event_log_addr, &tpm_event_log_size)) {
1703+
break; // no TPM or capture failed
1704+
}
1705+
1706+
struct limine_tpm_event_log_response *tpm_event_log_response =
1707+
ext_mem_alloc(sizeof(struct limine_tpm_event_log_response));
1708+
1709+
tpm_event_log_response->format = tpm_event_log_format;
1710+
tpm_event_log_response->size = tpm_event_log_size;
1711+
tpm_event_log_response->address = tpm_event_log_size > 0
1712+
? reported_addr(tpm_event_log_addr) : 0;
1713+
1714+
tpm_event_log_request->response = reported_addr(tpm_event_log_response);
1715+
FEAT_END
1716+
17151717
efi_exit_boot_services();
17161718
#endif
17171719

0 commit comments

Comments
 (0)