]> git.proxmox.com Git - libtpms.git/commitdiff
tpm2: Add function to display USER_NVRAM contents
authorStefan Berger <stefanb@linux.vnet.ibm.com>
Tue, 17 Jul 2018 13:50:04 +0000 (09:50 -0400)
committerStefan Berger <stefanb@linux.vnet.ibm.com>
Wed, 18 Jul 2018 00:40:45 +0000 (20:40 -0400)
Add a function for displaying the USER_NVRAM contents for debugging.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
src/tpm2/NVMarshal.c

index 5ca1a48225e5e9137ed6bc118091c9029af9ff4a..9bf86e042319e364b7605b63ddce0a2de7c30107 100644 (file)
@@ -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: