You've already forked edk2-platforms
mirror of
https://github.com/Dasharo/edk2-platforms.git
synced 2026-03-06 14:51:43 -08:00
MinPlatformPkg/Tcg2PlatformPei: Use TpmPlatformHierarchyLib
Eliminates code duplication in the module with TpmPlatformHierarchyLib. Pre-existing behavior of randomzing the TPM platform auth is retained by calling the implementation of ConfigureTpmPlatformHierarchy() in TpmPlatformHierarchyLib. Cc: Chasel Chiu <chasel.chiu@intel.com> Cc: Nate DeSimone <nathaniel.l.desimone@intel.com> Cc: Liming Gao <gaoliming@byosoft.com.cn> Cc: Eric Dong <eric.dong@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Jiewen Yao <jiewen.yao@intel.com> Acked-by: Michael D Kinney <michael.d.kinney@intel.com>
This commit is contained in:
committed by
Michael D Kinney
parent
ae8412ca99
commit
970b621c04
@@ -98,6 +98,7 @@
|
||||
TestPointCheckLib|MinPlatformPkg/Test/Library/TestPointCheckLib/PeiTestPointCheckLib.inf
|
||||
TestPointLib|MinPlatformPkg/Test/Library/TestPointLib/PeiTestPointLib.inf
|
||||
SetCacheMtrrLib|MinPlatformPkg/Library/SetCacheMtrrLib/SetCacheMtrrLibNull.inf
|
||||
TpmPlatformHierarchyLib|MinPlatformPkg/Tcg/Library/PeiDxeTpmPlatformHierarchyLib/PeiDxeTpmPlatformHierarchyLib.inf
|
||||
|
||||
[LibraryClasses.common.DXE_DRIVER]
|
||||
#
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/** @file
|
||||
|
||||
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) Microsoft Corporation.<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
@@ -13,134 +14,13 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
#include <Library/HobLib.h>
|
||||
#include <Library/Tpm2CommandLib.h>
|
||||
#include <Library/Tpm2DeviceLib.h>
|
||||
#include <Library/TpmPlatformHierarchyLib.h>
|
||||
#include <Library/RngLib.h>
|
||||
|
||||
#include <Ppi/EndOfPeiPhase.h>
|
||||
|
||||
#define MAX_NEW_AUTHORIZATION_SIZE SHA512_DIGEST_SIZE
|
||||
|
||||
/**
|
||||
Generate high-quality entropy source through RDRAND.
|
||||
|
||||
@param[in] Length Size of the buffer, in bytes, to fill with.
|
||||
@param[out] Entropy Pointer to the buffer to store the entropy data.
|
||||
|
||||
@retval EFI_SUCCESS Entropy generation succeeded.
|
||||
@retval EFI_NOT_READY Failed to request random data.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RdRandGenerateEntropy (
|
||||
IN UINTN Length,
|
||||
OUT UINT8 *Entropy
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINTN BlockCount;
|
||||
UINT64 Seed[2];
|
||||
UINT8 *Ptr;
|
||||
|
||||
Status = EFI_NOT_READY;
|
||||
BlockCount = Length / 64;
|
||||
Ptr = (UINT8 *)Entropy;
|
||||
|
||||
//
|
||||
// Generate high-quality seed for DRBG Entropy
|
||||
//
|
||||
while (BlockCount > 0) {
|
||||
Status = GetRandomNumber128(Seed);
|
||||
if (EFI_ERROR(Status)) {
|
||||
return Status;
|
||||
}
|
||||
CopyMem(Ptr, Seed, 64);
|
||||
|
||||
BlockCount--;
|
||||
Ptr = Ptr + 64;
|
||||
}
|
||||
|
||||
//
|
||||
// Populate the remained data as request.
|
||||
//
|
||||
Status = GetRandomNumber128(Seed);
|
||||
if (EFI_ERROR(Status)) {
|
||||
return Status;
|
||||
}
|
||||
CopyMem(Ptr, Seed, (Length % 64));
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**
|
||||
Set PlatformAuth to random value.
|
||||
**/
|
||||
VOID
|
||||
RandomizePlatformAuth (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINT16 AuthSize;
|
||||
TPML_PCR_SELECTION Pcrs;
|
||||
UINT32 Index;
|
||||
UINT8 *Rand;
|
||||
UINTN RandSize;
|
||||
TPM2B_AUTH NewPlatformAuth;
|
||||
|
||||
//
|
||||
// Send Tpm2HierarchyChange Auth with random value to avoid PlatformAuth being null
|
||||
//
|
||||
ZeroMem(&Pcrs, sizeof(TPML_PCR_SELECTION));
|
||||
AuthSize = MAX_NEW_AUTHORIZATION_SIZE;
|
||||
|
||||
Status = Tpm2GetCapabilityPcrs(&Pcrs);
|
||||
if (EFI_ERROR(Status)) {
|
||||
DEBUG((EFI_D_ERROR, "Tpm2GetCapabilityPcrs fail!\n"));
|
||||
} else {
|
||||
for (Index = 0; Index < Pcrs.count; Index++) {
|
||||
switch (Pcrs.pcrSelections[Index].hash) {
|
||||
case TPM_ALG_SHA1:
|
||||
AuthSize = SHA1_DIGEST_SIZE;
|
||||
break;
|
||||
case TPM_ALG_SHA256:
|
||||
AuthSize = SHA256_DIGEST_SIZE;
|
||||
break;
|
||||
case TPM_ALG_SHA384:
|
||||
AuthSize = SHA384_DIGEST_SIZE;
|
||||
break;
|
||||
case TPM_ALG_SHA512:
|
||||
AuthSize = SHA512_DIGEST_SIZE;
|
||||
break;
|
||||
case TPM_ALG_SM3_256:
|
||||
AuthSize = SM3_256_DIGEST_SIZE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ZeroMem(NewPlatformAuth.buffer, AuthSize);
|
||||
NewPlatformAuth.size = AuthSize;
|
||||
|
||||
//
|
||||
// Allocate one buffer to store random data.
|
||||
//
|
||||
RandSize = MAX_NEW_AUTHORIZATION_SIZE;
|
||||
Rand = AllocatePool(RandSize);
|
||||
|
||||
RdRandGenerateEntropy(RandSize, Rand);
|
||||
CopyMem(NewPlatformAuth.buffer, Rand, AuthSize);
|
||||
|
||||
FreePool(Rand);
|
||||
|
||||
//
|
||||
// Send Tpm2HierarchyChangeAuth command with the new Auth value
|
||||
//
|
||||
Status = Tpm2HierarchyChangeAuth(TPM_RH_PLATFORM, NULL, &NewPlatformAuth);
|
||||
DEBUG((DEBUG_INFO, "Tpm2HierarchyChangeAuth Result: - %r\n", Status));
|
||||
ZeroMem(NewPlatformAuth.buffer, AuthSize);
|
||||
ZeroMem(Rand, RandSize);
|
||||
}
|
||||
|
||||
/**
|
||||
This function handles PlatformInit task at the end of PEI
|
||||
|
||||
@@ -179,9 +59,9 @@ PlatformInitEndOfPei (
|
||||
|
||||
//
|
||||
// If there is S3 error on TPM_SU_STATE and success on TPM_SU_CLEAR,
|
||||
// Send Tpm2HierarchyChange Auth with random value to avoid PlatformAuth being null
|
||||
// configure the TPM Platform Hierarchy.
|
||||
//
|
||||
RandomizePlatformAuth();
|
||||
ConfigureTpmPlatformHierarchy ();
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
@@ -198,7 +78,7 @@ static EFI_PEI_NOTIFY_DESCRIPTOR mEndOfPeiNotifyList = {
|
||||
@param[in] FileHandle Handle of the file being invoked.
|
||||
@param[in] PeiServices Pointer to PEI Services table.
|
||||
|
||||
@retval EFI_SUCCESS Install function successfully.
|
||||
@retval EFI_SUCCESS Install function successfully.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
|
||||
@@ -29,11 +29,13 @@
|
||||
DebugLib
|
||||
Tpm2DeviceLib
|
||||
Tpm2CommandLib
|
||||
TpmPlatformHierarchyLib
|
||||
RngLib
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
SecurityPkg/SecurityPkg.dec
|
||||
MinPlatformPkg/MinPlatformPkg.dec
|
||||
|
||||
[Sources]
|
||||
Tcg2PlatformPei.c
|
||||
|
||||
Reference in New Issue
Block a user