[edk2] [Patch] SecurityPkg:Tcg2Smm: Update TcgNvs info after memory is allocated

Zhang, Chao B posted 1 patch 5 years, 11 months ago
Failed in applying to current master (apply log)
SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c | 19 ++++++++++++-------
1 file changed, 12 insertions(+), 7 deletions(-)
[edk2] [Patch] SecurityPkg:Tcg2Smm: Update TcgNvs info after memory is allocated
Posted by Zhang, Chao B 5 years, 11 months ago
Update package format info in _PRS to TcgNvs after memory is allocated.

Change-Id: Icfadb350e60d3ed2df332e92c257ce13309c0018
Contributed-under: TianoCore Contribution Agreement 1.1
Cc: Yao Jiewen <jiewen.yao@intel.com>
Cc: Long Qin <qin.long@intel.com>
Signed-off-by: Zhang, Chao B <chao.b.zhang@intel.com>
---
 SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c b/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c
index c3cee834ae..3e0a68999a 100644
--- a/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c
+++ b/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c
@@ -308,19 +308,21 @@ UpdatePPVersion (
   interrupt buffer size. BufferSize, PkgLength and interrupt descirptor in ByteList need to be patched
 
   @param[in, out] Table            The TPM item in ACPI table.
   @param[in]      IrqBuffer        Input new IRQ buffer.
   @param[in]      IrqBuffserSize   Input new IRQ buffer size.
+  @param[out]     IsShortFormPkgLength   If _PRS returns Short length Package(ACPI spec 20.2.4).
 
   @return                          patch status.
 
 **/
 EFI_STATUS
 UpdatePossibleResource (
-  EFI_ACPI_DESCRIPTION_HEADER    *Table,
-  UINT32                         *IrqBuffer,
-  UINT32                         IrqBuffserSize
+  IN  EFI_ACPI_DESCRIPTION_HEADER    *Table,
+  IN  UINT32                         *IrqBuffer,
+  IN  UINT32                         IrqBuffserSize,
+  OUT BOOLEAN                        *IsShortFormPkgLength
   )
 {
   UINT8       *DataPtr;
   UINT8       *DataEndPtr;
   UINT32      NewPkgLength;
@@ -429,11 +431,11 @@ UpdatePossibleResource (
       *(DataPtr + 2) = (UINT8)(IrqBuffserSize + 19);
 
       //
       // Notify _PRS to report short formed ResourceTemplate
       //
-      mTcgNvs->IsShortFormPkgLength = TRUE;
+      *IsShortFormPkgLength = TRUE;
 
       break;
     }
   }
 
@@ -501,11 +503,11 @@ UpdatePossibleResource (
         *(DataPtr + 2 + ((*DataPtr & (BIT7|BIT6)) >> 6)) = (UINT8)(IrqBuffserSize + 19);
 
         //
         // Notify _PRS to report long formed ResourceTemplate
         //
-        mTcgNvs->IsShortFormPkgLength = FALSE;
+        *IsShortFormPkgLength = FALSE;
         break;
       }
     }
   }
 
@@ -670,10 +672,13 @@ PublishAcpiTable (
   UINTN                          TableKey;
   EFI_ACPI_DESCRIPTION_HEADER    *Table;
   UINTN                          TableSize;
   UINT32                         *PossibleIrqNumBuf;
   UINT32                         PossibleIrqNumBufSize;
+  BOOLEAN                        IsShortFormPkgLength;
+
+  IsShortFormPkgLength = FALSE;
 
   Status = GetSectionFromFv (
              &gEfiCallerIdGuid,
              EFI_SECTION_RAW,
              0,
@@ -708,11 +713,11 @@ PublishAcpiTable (
     //
     PossibleIrqNumBuf     = (UINT32 *)PcdGetPtr(PcdTpm2PossibleIrqNumBuf);
     PossibleIrqNumBufSize = (UINT32)PcdGetSize(PcdTpm2PossibleIrqNumBuf);
 
     if (PossibleIrqNumBufSize <= MAX_PRS_INT_BUF_SIZE && (PossibleIrqNumBufSize % sizeof(UINT32)) == 0) {
-      Status = UpdatePossibleResource(Table, PossibleIrqNumBuf, PossibleIrqNumBufSize);
+      Status = UpdatePossibleResource(Table, PossibleIrqNumBuf, PossibleIrqNumBufSize, &IsShortFormPkgLength);
       DEBUG ((
         DEBUG_INFO,
         "UpdatePossibleResource status - %x. TPM2 service may not ready in OS.\n",
         Status
         ));
@@ -741,11 +746,11 @@ PublishAcpiTable (
   ASSERT (Table->OemTableId == SIGNATURE_64 ('T', 'p', 'm', '2', 'T', 'a', 'b', 'l'));
   CopyMem (Table->OemId, PcdGetPtr (PcdAcpiDefaultOemId), sizeof (Table->OemId) );
   mTcgNvs = AssignOpRegion (Table, SIGNATURE_32 ('T', 'N', 'V', 'S'), (UINT16) sizeof (TCG_NVS));
   ASSERT (mTcgNvs != NULL);
   mTcgNvs->TpmIrqNum            = PcdGet32(PcdTpm2CurrentIrqNum);
-  mTcgNvs->IsShortFormPkgLength = FALSE;
+  mTcgNvs->IsShortFormPkgLength = IsShortFormPkgLength;
 
   //
   // Publish the TPM ACPI table. Table is re-checksumed.
   //
   Status = gBS->LocateProtocol (&gEfiAcpiTableProtocolGuid, NULL, (VOID **) &AcpiTable);
-- 
2.16.2.windows.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Re: [edk2] [Patch] SecurityPkg:Tcg2Smm: Update TcgNvs info after memory is allocated
Posted by Long, Qin 5 years, 11 months ago
Reviewed-by: Long Qin <qin.long@intel.com>


Best Regards & Thanks,
LONG, Qin

> -----Original Message-----
> From: Zhang, Chao B
> Sent: Sunday, May 20, 2018 10:42 PM
> To: edk2-devel@lists.01.org
> Cc: Yao, Jiewen <jiewen.yao@intel.com>; Long, Qin <qin.long@intel.com>
> Subject: [Patch] SecurityPkg:Tcg2Smm: Update TcgNvs info after memory is
> allocated
> 
> Update package format info in _PRS to TcgNvs after memory is allocated.
> 
> Change-Id: Icfadb350e60d3ed2df332e92c257ce13309c0018
> Contributed-under: TianoCore Contribution Agreement 1.1
> Cc: Yao Jiewen <jiewen.yao@intel.com>
> Cc: Long Qin <qin.long@intel.com>
> Signed-off-by: Zhang, Chao B <chao.b.zhang@intel.com>
> ---
>  SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c | 19 ++++++++++++-------
>  1 file changed, 12 insertions(+), 7 deletions(-)
> 
> diff --git a/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c
> b/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c
> index c3cee834ae..3e0a68999a 100644
> --- a/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c
> +++ b/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c
> @@ -308,19 +308,21 @@ UpdatePPVersion (
>    interrupt buffer size. BufferSize, PkgLength and interrupt descirptor in ByteList
> need to be patched
> 
>    @param[in, out] Table            The TPM item in ACPI table.
>    @param[in]      IrqBuffer        Input new IRQ buffer.
>    @param[in]      IrqBuffserSize   Input new IRQ buffer size.
> +  @param[out]     IsShortFormPkgLength   If _PRS returns Short length
> Package(ACPI spec 20.2.4).
> 
>    @return                          patch status.
> 
>  **/
>  EFI_STATUS
>  UpdatePossibleResource (
> -  EFI_ACPI_DESCRIPTION_HEADER    *Table,
> -  UINT32                         *IrqBuffer,
> -  UINT32                         IrqBuffserSize
> +  IN  EFI_ACPI_DESCRIPTION_HEADER    *Table,
> +  IN  UINT32                         *IrqBuffer,
> +  IN  UINT32                         IrqBuffserSize,
> +  OUT BOOLEAN                        *IsShortFormPkgLength
>    )
>  {
>    UINT8       *DataPtr;
>    UINT8       *DataEndPtr;
>    UINT32      NewPkgLength;
> @@ -429,11 +431,11 @@ UpdatePossibleResource (
>        *(DataPtr + 2) = (UINT8)(IrqBuffserSize + 19);
> 
>        //
>        // Notify _PRS to report short formed ResourceTemplate
>        //
> -      mTcgNvs->IsShortFormPkgLength = TRUE;
> +      *IsShortFormPkgLength = TRUE;
> 
>        break;
>      }
>    }
> 
> @@ -501,11 +503,11 @@ UpdatePossibleResource (
>          *(DataPtr + 2 + ((*DataPtr & (BIT7|BIT6)) >> 6)) = (UINT8)(IrqBuffserSize +
> 19);
> 
>          //
>          // Notify _PRS to report long formed ResourceTemplate
>          //
> -        mTcgNvs->IsShortFormPkgLength = FALSE;
> +        *IsShortFormPkgLength = FALSE;
>          break;
>        }
>      }
>    }
> 
> @@ -670,10 +672,13 @@ PublishAcpiTable (
>    UINTN                          TableKey;
>    EFI_ACPI_DESCRIPTION_HEADER    *Table;
>    UINTN                          TableSize;
>    UINT32                         *PossibleIrqNumBuf;
>    UINT32                         PossibleIrqNumBufSize;
> +  BOOLEAN                        IsShortFormPkgLength;
> +
> +  IsShortFormPkgLength = FALSE;
> 
>    Status = GetSectionFromFv (
>               &gEfiCallerIdGuid,
>               EFI_SECTION_RAW,
>               0,
> @@ -708,11 +713,11 @@ PublishAcpiTable (
>      //
>      PossibleIrqNumBuf     = (UINT32 *)PcdGetPtr(PcdTpm2PossibleIrqNumBuf);
>      PossibleIrqNumBufSize = (UINT32)PcdGetSize(PcdTpm2PossibleIrqNumBuf);
> 
>      if (PossibleIrqNumBufSize <= MAX_PRS_INT_BUF_SIZE &&
> (PossibleIrqNumBufSize % sizeof(UINT32)) == 0) {
> -      Status = UpdatePossibleResource(Table, PossibleIrqNumBuf,
> PossibleIrqNumBufSize);
> +      Status = UpdatePossibleResource(Table, PossibleIrqNumBuf,
> PossibleIrqNumBufSize, &IsShortFormPkgLength);
>        DEBUG ((
>          DEBUG_INFO,
>          "UpdatePossibleResource status - %x. TPM2 service may not ready in
> OS.\n",
>          Status
>          ));
> @@ -741,11 +746,11 @@ PublishAcpiTable (
>    ASSERT (Table->OemTableId == SIGNATURE_64 ('T', 'p', 'm', '2', 'T', 'a', 'b', 'l'));
>    CopyMem (Table->OemId, PcdGetPtr (PcdAcpiDefaultOemId), sizeof (Table-
> >OemId) );
>    mTcgNvs = AssignOpRegion (Table, SIGNATURE_32 ('T', 'N', 'V', 'S'), (UINT16)
> sizeof (TCG_NVS));
>    ASSERT (mTcgNvs != NULL);
>    mTcgNvs->TpmIrqNum            = PcdGet32(PcdTpm2CurrentIrqNum);
> -  mTcgNvs->IsShortFormPkgLength = FALSE;
> +  mTcgNvs->IsShortFormPkgLength = IsShortFormPkgLength;
> 
>    //
>    // Publish the TPM ACPI table. Table is re-checksumed.
>    //
>    Status = gBS->LocateProtocol (&gEfiAcpiTableProtocolGuid, NULL, (VOID **)
> &AcpiTable);
> --
> 2.16.2.windows.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel