Skip to content

Commit

Permalink
[Cherry-Pick] SecurityPkg: Consume gEdkiiTcg2AcpiCommunicateBufferHob…
Browse files Browse the repository at this point in the history
…Guid

Consume gEdkiiTcg2AcpiCommunicateBufferHobGuid in Tcg2Acpi
driver. Tcg2Acpi will use the buffer stored in the HOB to
exchange information with Tcg2StandaloneMm by the
MM_COMMUNICATION_PROTOCOL.

Signed-off-by: Dun Tan <[email protected]>
  • Loading branch information
td36 authored and apop5 committed Oct 31, 2024
1 parent 88da55d commit d190f9e
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 15 deletions.
28 changes: 15 additions & 13 deletions SecurityPkg/Tcg/Tcg2Acpi/Tcg2Acpi.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
This driver will have external input - variable and ACPINvs data in SMM mode.
This external input must be validated carefully to avoid security issue.
Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2015 - 2024, Intel Corporation. All rights reserved.<BR>
Copyright (c) Microsoft Corporation.
SPDX-License-Identifier: BSD-2-Clause-Patent
Expand All @@ -22,6 +22,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <Guid/TpmInstance.h>
#include <Guid/TpmNvsMm.h>
#include <Guid/PiSmmCommunicationRegionTable.h>
#include <Guid/Tcg2AcpiCommunicateBuffer.h>

#include <Protocol/AcpiTable.h>
#include <Protocol/Tcg2Protocol.h>
Expand All @@ -38,7 +39,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <Library/Tpm2DeviceLib.h>
#include <Library/Tpm2CommandLib.h>
#include <Library/UefiLib.h>
#include <Library/MmUnblockMemoryLib.h>
#include <Library/HobLib.h>

//
// Physical Presence Interface Version supported by Platform
Expand Down Expand Up @@ -116,7 +117,7 @@ TCG_NVS *mTcgNvs;
@param[in] Name The name string to find in TPM table.
@param[in] Size The size of the region to find.
@return The allocated address for the found region.
@return The Acpi Communicate Buffer for the found region.
**/
VOID *
Expand All @@ -126,9 +127,10 @@ AssignOpRegion (
UINT16 Size
)
{
EFI_STATUS Status;
AML_OP_REGION_32_8 *OpRegion;
EFI_PHYSICAL_ADDRESS MemoryAddress;
AML_OP_REGION_32_8 *OpRegion;
EFI_PHYSICAL_ADDRESS MemoryAddress;
EFI_HOB_GUID_TYPE *GuidHob;
TCG2_ACPI_COMMUNICATE_BUFFER *Tcg2AcpiCommunicateBufferHob;

MemoryAddress = SIZE_4GB - 1;

Expand All @@ -144,16 +146,16 @@ AssignOpRegion (
(OpRegion->DWordPrefix == AML_DWORD_PREFIX) &&
(OpRegion->BytePrefix == AML_BYTE_PREFIX))
{
Status = gBS->AllocatePages (AllocateMaxAddress, EfiACPIMemoryNVS, EFI_SIZE_TO_PAGES (Size), &MemoryAddress);
ASSERT_EFI_ERROR (Status);
GuidHob = GetFirstGuidHob (&gEdkiiTcg2AcpiCommunicateBufferHobGuid);
ASSERT (GuidHob != NULL);
Tcg2AcpiCommunicateBufferHob = GET_GUID_HOB_DATA (GuidHob);
MemoryAddress = Tcg2AcpiCommunicateBufferHob->Tcg2AcpiCommunicateBuffer;
ASSERT (MemoryAddress != 0);
ASSERT (EFI_PAGES_TO_SIZE (Tcg2AcpiCommunicateBufferHob->Pages) >= Size);

ZeroMem ((VOID *)(UINTN)MemoryAddress, Size);
OpRegion->RegionOffset = (UINT32)(UINTN)MemoryAddress;
OpRegion->RegionLen = (UINT8)Size;
// Request to unblock this region from MM core
Status = MmUnblockMemoryRequest (MemoryAddress, EFI_SIZE_TO_PAGES (Size));
if ((Status != EFI_UNSUPPORTED) && EFI_ERROR (Status)) {
ASSERT_EFI_ERROR (Status);
}

break;
}
Expand Down
5 changes: 3 additions & 2 deletions SecurityPkg/Tcg/Tcg2Acpi/Tcg2Acpi.inf
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
# This driver will have external input - variable and ACPINvs data in SMM mode.
# This external input must be validated carefully to avoid security issue.
#
# Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.<BR>
# Copyright (c) 2015 - 2024, Intel Corporation. All rights reserved.<BR>
# Copyright (c) Microsoft Corporation.<BR>
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
Expand Down Expand Up @@ -57,12 +57,13 @@
Tpm2CommandLib
Tcg2PhysicalPresenceLib
PcdLib
MmUnblockMemoryLib
HobLib

[Guids]
gEfiTpmDeviceInstanceTpm20DtpmGuid ## PRODUCES ## GUID # TPM device identifier
gTpmNvsMmGuid ## CONSUMES
gEdkiiPiSmmCommunicationRegionTableGuid ## CONSUMES
gEdkiiTcg2AcpiCommunicateBufferHobGuid

[Protocols]
gEfiAcpiTableProtocolGuid ## CONSUMES
Expand Down

0 comments on commit d190f9e

Please sign in to comment.