]> git.proxmox.com Git - mirror_edk2.git/commitdiff
SecurityPkg: Fix GetSupportedAndActivePcrs counter calculation
authorRodrigo Gonzalez del Cueto <rodrigo.gonzalez.del.cueto@intel.com>
Mon, 20 Jul 2020 21:26:37 +0000 (14:26 -0700)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Mon, 9 Aug 2021 03:32:24 +0000 (03:32 +0000)
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2855
The Tpm2GetCapabilitySupportedAndActivePcrs function prints a
count number that should reflect the *supported and currently
active* PCR banks, but the implementation in place displays
instead the count of the *supported PCR banks* retrieved
directly from the Tpm2GetCapabilityPcrs()
TPML_PCR_SELECTION output.

The counter should only take into account those PCRs banks
which are active.

Replaced usage of EFI_D_* for DEBUG_* definitions in debug
messages.

Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Qi Zhang <qi1.zhang@intel.com>
Signed-off-by: Rodrigo Gonzalez del Cueto <rodrigo.gonzalez.del.cueto@intel.com>
Reviewed-by: Jiewen Yao <Jiewen.yao@intel.com>
SecurityPkg/Library/Tpm2CommandLib/Tpm2Capability.c

index 17c0c3a15158d26fb51abf57a39a3840ba1ee63f..dcbdf72cac6f09b61898d8b606a6f28b7f9008e6 100644 (file)
@@ -112,7 +112,7 @@ Tpm2GetCapability (
   // Fail if command failed\r
   //\r
   if (SwapBytes32(RecvBuffer.Header.responseCode) != TPM_RC_SUCCESS) {\r
-    DEBUG ((EFI_D_ERROR, "Tpm2GetCapability: Response Code error! 0x%08x\r\n", SwapBytes32(RecvBuffer.Header.responseCode)));\r
+    DEBUG ((DEBUG_ERROR, "Tpm2GetCapability: Response Code error! 0x%08x\r\n", SwapBytes32(RecvBuffer.Header.responseCode)));\r
     return EFI_DEVICE_ERROR;\r
   }\r
 \r
@@ -524,74 +524,86 @@ Tpm2GetCapabilitySupportedAndActivePcrs (
   EFI_STATUS            Status;\r
   TPML_PCR_SELECTION    Pcrs;\r
   UINTN                 Index;\r
+  UINT8                 ActivePcrBankCount;\r
 \r
   //\r
-  // Get supported PCR and current Active PCRs.\r
+  // Get supported PCR\r
   //\r
   Status = Tpm2GetCapabilityPcrs (&Pcrs);\r
-\r
+  DEBUG ((DEBUG_INFO, "Supported PCRs - Count = %08x\n", Pcrs.count));\r
+  ActivePcrBankCount = 0;\r
   //\r
   // If error, assume that we have at least SHA-1 (and return the error.)\r
   //\r
   if (EFI_ERROR (Status)) {\r
-    DEBUG ((EFI_D_ERROR, "GetSupportedAndActivePcrs - Tpm2GetCapabilityPcrs fail!\n"));\r
+    DEBUG ((DEBUG_ERROR, "GetSupportedAndActivePcrs - Tpm2GetCapabilityPcrs fail!\n"));\r
     *TpmHashAlgorithmBitmap = HASH_ALG_SHA1;\r
     *ActivePcrBanks         = HASH_ALG_SHA1;\r
+    ActivePcrBankCount = 1;\r
   }\r
   //\r
   // Otherwise, process the return data to determine what algorithms are supported\r
   // and currently allocated.\r
   //\r
   else {\r
-    DEBUG ((EFI_D_INFO, "GetSupportedAndActivePcrs - Count = %08x\n", Pcrs.count));\r
     *TpmHashAlgorithmBitmap = 0;\r
     *ActivePcrBanks         = 0;\r
     for (Index = 0; Index < Pcrs.count; Index++) {\r
       switch (Pcrs.pcrSelections[Index].hash) {\r
       case TPM_ALG_SHA1:\r
-        DEBUG ((EFI_D_VERBOSE, "GetSupportedAndActivePcrs - HASH_ALG_SHA1 present.\n"));\r
+        DEBUG ((DEBUG_VERBOSE, "GetSupportedAndActivePcrs - HASH_ALG_SHA1 present.\n"));\r
         *TpmHashAlgorithmBitmap |= HASH_ALG_SHA1;\r
         if (!IsZeroBuffer (Pcrs.pcrSelections[Index].pcrSelect, Pcrs.pcrSelections[Index].sizeofSelect)) {\r
-          DEBUG ((EFI_D_VERBOSE, "GetSupportedAndActivePcrs - HASH_ALG_SHA1 active.\n"));\r
+          DEBUG ((DEBUG_VERBOSE, "GetSupportedAndActivePcrs - HASH_ALG_SHA1 active.\n"));\r
           *ActivePcrBanks |= HASH_ALG_SHA1;\r
+          ActivePcrBankCount++;\r
         }\r
         break;\r
       case TPM_ALG_SHA256:\r
-        DEBUG ((EFI_D_VERBOSE, "GetSupportedAndActivePcrs - HASH_ALG_SHA256 present.\n"));\r
+        DEBUG ((DEBUG_VERBOSE, "GetSupportedAndActivePcrs - HASH_ALG_SHA256 present.\n"));\r
         *TpmHashAlgorithmBitmap |= HASH_ALG_SHA256;\r
         if (!IsZeroBuffer (Pcrs.pcrSelections[Index].pcrSelect, Pcrs.pcrSelections[Index].sizeofSelect)) {\r
-          DEBUG ((EFI_D_VERBOSE, "GetSupportedAndActivePcrs - HASH_ALG_SHA256 active.\n"));\r
+          DEBUG ((DEBUG_VERBOSE, "GetSupportedAndActivePcrs - HASH_ALG_SHA256 active.\n"));\r
           *ActivePcrBanks |= HASH_ALG_SHA256;\r
+          ActivePcrBankCount++;\r
         }\r
         break;\r
       case TPM_ALG_SHA384:\r
-        DEBUG ((EFI_D_VERBOSE, "GetSupportedAndActivePcrs - HASH_ALG_SHA384 present.\n"));\r
+        DEBUG ((DEBUG_VERBOSE, "GetSupportedAndActivePcrs - HASH_ALG_SHA384 present.\n"));\r
         *TpmHashAlgorithmBitmap |= HASH_ALG_SHA384;\r
         if (!IsZeroBuffer (Pcrs.pcrSelections[Index].pcrSelect, Pcrs.pcrSelections[Index].sizeofSelect)) {\r
-          DEBUG ((EFI_D_VERBOSE, "GetSupportedAndActivePcrs - HASH_ALG_SHA384 active.\n"));\r
+          DEBUG ((DEBUG_VERBOSE, "GetSupportedAndActivePcrs - HASH_ALG_SHA384 active.\n"));\r
           *ActivePcrBanks |= HASH_ALG_SHA384;\r
+          ActivePcrBankCount++;\r
         }\r
         break;\r
       case TPM_ALG_SHA512:\r
-        DEBUG ((EFI_D_VERBOSE, "GetSupportedAndActivePcrs - HASH_ALG_SHA512 present.\n"));\r
+        DEBUG ((DEBUG_VERBOSE, "GetSupportedAndActivePcrs - HASH_ALG_SHA512 present.\n"));\r
         *TpmHashAlgorithmBitmap |= HASH_ALG_SHA512;\r
         if (!IsZeroBuffer (Pcrs.pcrSelections[Index].pcrSelect, Pcrs.pcrSelections[Index].sizeofSelect)) {\r
-          DEBUG ((EFI_D_VERBOSE, "GetSupportedAndActivePcrs - HASH_ALG_SHA512 active.\n"));\r
+          DEBUG ((DEBUG_VERBOSE, "GetSupportedAndActivePcrs - HASH_ALG_SHA512 active.\n"));\r
           *ActivePcrBanks |= HASH_ALG_SHA512;\r
+          ActivePcrBankCount++;\r
         }\r
         break;\r
       case TPM_ALG_SM3_256:\r
-        DEBUG ((EFI_D_VERBOSE, "GetSupportedAndActivePcrs - HASH_ALG_SM3_256 present.\n"));\r
+        DEBUG ((DEBUG_VERBOSE, "GetSupportedAndActivePcrs - HASH_ALG_SM3_256 present.\n"));\r
         *TpmHashAlgorithmBitmap |= HASH_ALG_SM3_256;\r
         if (!IsZeroBuffer (Pcrs.pcrSelections[Index].pcrSelect, Pcrs.pcrSelections[Index].sizeofSelect)) {\r
-          DEBUG ((EFI_D_VERBOSE, "GetSupportedAndActivePcrs - HASH_ALG_SM3_256 active.\n"));\r
+          DEBUG ((DEBUG_VERBOSE, "GetSupportedAndActivePcrs - HASH_ALG_SM3_256 active.\n"));\r
           *ActivePcrBanks |= HASH_ALG_SM3_256;\r
+          ActivePcrBankCount++;\r
         }\r
         break;\r
+      default:\r
+        DEBUG ((DEBUG_VERBOSE, "GetSupportedAndActivePcrs - Unsupported bank 0x%04x.\n", Pcrs.pcrSelections[Index].hash));\r
+        continue;\r
+        break;\r
       }\r
     }\r
   }\r
 \r
+  DEBUG ((DEBUG_INFO, "GetSupportedAndActivePcrs - Count = %08x\n", ActivePcrBankCount));\r
   return Status;\r
 }\r
 \r
@@ -877,11 +889,11 @@ Tpm2TestParms (
   }\r
 \r
   if (RecvBufferSize < sizeof (TPM2_RESPONSE_HEADER)) {\r
-    DEBUG ((EFI_D_ERROR, "Tpm2TestParms - RecvBufferSize Error - %x\n", RecvBufferSize));\r
+    DEBUG ((DEBUG_ERROR, "Tpm2TestParms - RecvBufferSize Error - %x\n", RecvBufferSize));\r
     return EFI_DEVICE_ERROR;\r
   }\r
   if (SwapBytes32(RecvBuffer.Header.responseCode) != TPM_RC_SUCCESS) {\r
-    DEBUG ((EFI_D_ERROR, "Tpm2TestParms - responseCode - %x\n", SwapBytes32(RecvBuffer.Header.responseCode)));\r
+    DEBUG ((DEBUG_ERROR, "Tpm2TestParms - responseCode - %x\n", SwapBytes32(RecvBuffer.Header.responseCode)));\r
     return EFI_UNSUPPORTED;\r
   }\r
 \r