]> git.proxmox.com Git - libtpms.git/commitdiff
tpm2: Surround all occurrences of BLOCK_SKIP_READ() with tests of 'rc'
authorStefan Berger <stefanb@linux.ibm.com>
Tue, 4 May 2021 15:37:29 +0000 (11:37 -0400)
committerStefan Berger <stefanb@us.ibm.com>
Tue, 4 May 2021 18:23:35 +0000 (14:23 -0400)
Do not call BLOCK_SKIP_READ once rc has been set to any error value.
Therefore, surround all occurrences of BLOCK_SKIP_READ() with tests
of 'rc'.

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

index b57f245e937c250678a1e9896c35e08de6a81877..a0299de16113535e76428c571e8dda3fef1888dd 100644 (file)
@@ -1366,8 +1366,10 @@ skip_alg_ecc:
                                              buffer, size, "nullSeed");
         }
 
-        BLOCK_SKIP_READ(skip_future_versions, FALSE, buffer, size,
-                        "STATE_RESET_DATA", "version 4 or later");
+        if (rc == TPM_RC_SUCCESS) {
+            BLOCK_SKIP_READ(skip_future_versions, FALSE, buffer, size,
+                            "STATE_RESET_DATA", "version 4 or later");
+        }
         /* future versions nest-append here */
     }
 
@@ -2490,8 +2492,10 @@ skip_alg_rsa:
                                         "OBJECT seedCompatLevel");
         }
 
-        BLOCK_SKIP_READ(skip_future_versions, FALSE, buffer, size,
-                        "OBJECT", "version 4 or later");
+        if (rc == TPM_RC_SUCCESS) {
+            BLOCK_SKIP_READ(skip_future_versions, FALSE, buffer, size,
+                            "OBJECT", "version 4 or later");
+        }
         /* future versions nest-append here */
     }
 
@@ -3563,16 +3567,20 @@ skip_hardware_clock:
     if (rc == TPM_RC_SUCCESS && hdr.version >= 2) {
         BLOCK_SKIP_READ(skip_future_versions, hdr.version >= 3, buffer, size,
                         "Volatile State", "version 3 or later");
-        rc = VolatileState_TailV3_Unmarshal(buffer, size);
-
-        BLOCK_SKIP_READ(skip_future_versions, hdr.version >= 4, buffer, size,
-                        "Volatile State", "version 4 or later");
+        if (rc == TPM_RC_SUCCESS) {
+            rc = VolatileState_TailV3_Unmarshal(buffer, size);
+        }
+        if (rc == TPM_RC_SUCCESS) {
+            BLOCK_SKIP_READ(skip_future_versions, hdr.version >= 4, buffer, size,
+                            "Volatile State", "version 4 or later");
+        }
         if (rc == TPM_RC_SUCCESS) {
             rc = VolatileState_TailV4_Unmarshal(buffer, size);
         }
-
-        BLOCK_SKIP_READ(skip_future_versions, FALSE, buffer, size,
-                        "Volatile State", "version 5 or later");
+        if (rc == TPM_RC_SUCCESS) {
+            BLOCK_SKIP_READ(skip_future_versions, FALSE, buffer, size,
+                            "Volatile State", "version 5 or later");
+        }
         /* future versions append here */
     }
 
@@ -4140,10 +4148,14 @@ skip_num_policy_pcr_group:
     if (rc == TPM_RC_SUCCESS && hdr.version >= 2) {
         BLOCK_SKIP_READ(skip_future_versions, hdr.version >= 3, buffer, size,
                         "PERSISTENT_DATA", "version 3 or later");
-        rc = TPML_PCR_SELECTION_Unmarshal(&shadow.pcrAllocated, buffer, size);
+        if (rc == TPM_RC_SUCCESS) {
+            rc = TPML_PCR_SELECTION_Unmarshal(&shadow.pcrAllocated, buffer, size);
+        }
 
-        BLOCK_SKIP_READ(skip_future_versions, hdr.version >= 4, buffer, size,
-                        "PERSISTENT_DATA", "version 4 or later");
+        if (rc == TPM_RC_SUCCESS) {
+            BLOCK_SKIP_READ(skip_future_versions, hdr.version >= 4, buffer, size,
+                            "PERSISTENT_DATA", "version 4 or later");
+        }
 
         if (rc == TPM_RC_SUCCESS) {
             rc = SEED_COMPAT_LEVEL_Unmarshal(&data->EPSeedCompatLevel,
@@ -4158,8 +4170,10 @@ skip_num_policy_pcr_group:
                                              buffer, size, "PPSeed");
         }
 
-        BLOCK_SKIP_READ(skip_future_versions, FALSE, buffer, size,
-                        "PERSISTENT_DATA", "version 5 or later");
+        if (rc == TPM_RC_SUCCESS) {
+            BLOCK_SKIP_READ(skip_future_versions, FALSE, buffer, size,
+                            "PERSISTENT_DATA", "version 5 or later");
+        }
         /* future versions nest-append here */
     }