From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.115; helo=mga14.intel.com; envelope-from=chao.b.zhang@intel.com; receiver=edk2-devel@lists.01.org Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 2DA362097DD3F for ; Sun, 20 May 2018 07:42:34 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 20 May 2018 07:42:34 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.49,423,1520924400"; d="scan'208";a="225742668" Received: from shwde9099.ccr.corp.intel.com ([10.239.9.146]) by orsmga005.jf.intel.com with ESMTP; 20 May 2018 07:42:32 -0700 From: "Zhang, Chao B" To: edk2-devel@lists.01.org Cc: Yao Jiewen , Long Qin Date: Sun, 20 May 2018 22:42:27 +0800 Message-Id: <20180520144227.35132-1-chao.b.zhang@intel.com> X-Mailer: git-send-email 2.16.2.windows.1 Subject: [Patch] SecurityPkg:Tcg2Smm: Update TcgNvs info after memory is allocated X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 20 May 2018 14:42:35 -0000 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 Cc: Long Qin Signed-off-by: Zhang, Chao B --- 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