From 3ed74913236d3f3be7ade98ff7d2d54555182e94 Mon Sep 17 00:00:00 2001 From: Stefan Berger Date: Tue, 17 Jul 2018 09:50:04 -0400 Subject: [PATCH] tpm2: Add function to display USER_NVRAM contents Add a function for displaying the USER_NVRAM contents for debugging. Signed-off-by: Stefan Berger --- src/tpm2/NVMarshal.c | 65 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/src/tpm2/NVMarshal.c b/src/tpm2/NVMarshal.c index 5ca1a482..9bf86e04 100644 --- a/src/tpm2/NVMarshal.c +++ b/src/tpm2/NVMarshal.c @@ -4085,6 +4085,65 @@ exit_size: return TPM_RC_SIZE; } +static void +USER_NVRAM_Display(const char *msg) +{ + NV_REF entryRef = NV_USER_DYNAMIC; + UINT32 entrysize; + UINT64 offset = 0; + TPM_HANDLE handle; + UINT32 datasize; + NV_INDEX nvi; + OBJECT obj; + UINT64 maxCount; + + fprintf(stderr, "USER_NVRAM contents %s:\n", msg); + + while (TRUE) { + /* 1st: entrysize */ + NvRead(&entrysize, entryRef, sizeof(entrysize)); + fprintf(stderr, " offset: %5lu entry size: %5u ", + entryRef - NV_USER_DYNAMIC, entrysize); + offset = sizeof(UINT32); + + if (entrysize == 0) + break; + + /* 2nd: the handle -- it will tell us what datatype this is */ + NvRead(&handle, entryRef + offset, sizeof(handle)); + fprintf(stderr, "handle: 0x%08x ", handle); + + switch (HandleGetType(handle)) { + case TPM_HT_NV_INDEX: + fprintf(stderr, " (NV_INDEX) "); + /* NV_INDEX has the index again at offset 0! */ + NvReadNvIndexInfo(entryRef + offset, &nvi); + offset += sizeof(nvi); + datasize = entrysize - sizeof(UINT32) - sizeof(nvi); + fprintf(stderr, " datasize: %u\n",datasize); + break; + break; + case TPM_HT_PERSISTENT: + fprintf(stderr, " (PERSISTENT)"); + offset += sizeof(handle); + + NvRead(&obj, entryRef + offset, sizeof(obj)); + offset += sizeof(obj); + fprintf(stderr, " sizeof(obj): %zu\n", sizeof(obj)); + break; + default: + TPMLIB_LogTPM2Error("USER NVRAM: Corrupted handle: %08x\n", handle); + } + /* advance to next entry */ + entryRef += entrysize; + } + fprintf(stderr, "\n"); + + NvRead(&maxCount, entryRef + offset, sizeof(maxCount)); + fprintf(stderr, " maxCount: %ld\n", maxCount); + fprintf(stderr, "-----------------------------\n"); +} + #define USER_NVRAM_VERSION 2 #define USER_NVRAM_MAGIC 0x094f22c3 UINT32 @@ -4102,6 +4161,9 @@ USER_NVRAM_Marshal(BYTE **buffer, INT32 *size) UINT64 sourceside_size = NV_USER_DYNAMIC_END - NV_USER_DYNAMIC; BLOCK_SKIP_INIT; + if (FALSE) + USER_NVRAM_Display("before marshalling"); + written = NV_HEADER_Marshal(buffer, size, USER_NVRAM_VERSION, USER_NVRAM_MAGIC, 1); @@ -4303,6 +4365,9 @@ USER_NVRAM_Unmarshal(BYTE **buffer, INT32 *size) skip_future_versions: + if (FALSE) + USER_NVRAM_Display("after unmarshalling"); + return rc; exit_size: