]> git.proxmox.com Git - mirror_edk2.git/commitdiff
SecurityPkg: Fix TPM2 ACPI measurement.
authorDerek Lin <derek.lin2@hpe.com>
Wed, 6 Nov 2019 09:00:47 +0000 (09:00 +0000)
committerJian J Wang <jian.j.wang@intel.com>
Thu, 7 Nov 2019 05:11:34 +0000 (13:11 +0800)
We have discussed in this thread.
https://edk2.groups.io/g/devel/topic/32205028

Before the change, TPM FW upgrade will impact TPM2 ACPI PCR value because
TPM2 ACPI HID include FW version.

This change make the measurement before TPM2 HID fixup. So, after TPM FW
upgrade, the ACPI PCR record remains the same.

Signed-off-by: Derek Lin <derek.lin2@hpe.com>
Reviewed by: Jiewen Yao <Jiewen.yao@intel.com>
Reviewed-by: Jian J Wang <jian.j.wang@intel.com>
SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c

index bd786bf4791fb8c792ebb55cd0fd56a254a2516b..54966c83ce861319ccee39672041a9b3d5303f23 100644 (file)
@@ -664,7 +664,22 @@ PublishAcpiTable (
     ));\r
 \r
   //\r
-  // Update TPM2 HID before measuring it to PCR\r
+  // Measure to PCR[0] with event EV_POST_CODE ACPI DATA.\r
+  // The measurement has to be done before UpdateHID since TPM2 ACPI HID\r
+  // imply TPM Firmware Version. Otherwise, the PCR record would be\r
+  // different after TPM FW update.\r
+  //\r
+  TpmMeasureAndLogData(\r
+    0,\r
+    EV_POST_CODE,\r
+    EV_POSTCODE_INFO_ACPI_DATA,\r
+    ACPI_DATA_LEN,\r
+    Table,\r
+    TableSize\r
+    );\r
+\r
+  //\r
+  // Update TPM2 HID after measuring it to PCR\r
   //\r
   Status = UpdateHID(Table);\r
   if (EFI_ERROR(Status)) {\r
@@ -694,19 +709,6 @@ PublishAcpiTable (
     }\r
   }\r
 \r
-  //\r
-  // Measure to PCR[0] with event EV_POST_CODE ACPI DATA\r
-  //\r
-  TpmMeasureAndLogData(\r
-    0,\r
-    EV_POST_CODE,\r
-    EV_POSTCODE_INFO_ACPI_DATA,\r
-    ACPI_DATA_LEN,\r
-    Table,\r
-    TableSize\r
-    );\r
-\r
-\r
   ASSERT (Table->OemTableId == SIGNATURE_64 ('T', 'p', 'm', '2', 'T', 'a', 'b', 'l'));\r
   CopyMem (Table->OemId, PcdGetPtr (PcdAcpiDefaultOemId), sizeof (Table->OemId) );\r
   mTcgNvs = AssignOpRegion (Table, SIGNATURE_32 ('T', 'N', 'V', 'S'), (UINT16) sizeof (TCG_NVS));\r