SecurityPkg/TPM: Fix bugs in imported PeiDxeTpmPlatformHierarchyLib

Fix some bugs in the original PeiDxeTpmPlatformHierarchyLib.c.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
This commit is contained in:
Stefan Berger 2021-09-13 22:20:58 +08:00 committed by mergify[bot]
parent 610d8073f2
commit 4d5f39cd22
2 changed files with 8 additions and 20 deletions

View File

@ -18,7 +18,6 @@
#include <Library/BaseMemoryLib.h> #include <Library/BaseMemoryLib.h>
#include <Library/DebugLib.h> #include <Library/DebugLib.h>
#include <Library/MemoryAllocationLib.h> #include <Library/MemoryAllocationLib.h>
#include <Library/PcdLib.h>
#include <Library/RngLib.h> #include <Library/RngLib.h>
#include <Library/Tpm2CommandLib.h> #include <Library/Tpm2CommandLib.h>
#include <Library/Tpm2DeviceLib.h> #include <Library/Tpm2DeviceLib.h>
@ -27,7 +26,6 @@
// The authorization value may be no larger than the digest produced by the hash // The authorization value may be no larger than the digest produced by the hash
// algorithm used for context integrity. // algorithm used for context integrity.
// //
#define MAX_NEW_AUTHORIZATION_SIZE SHA512_DIGEST_SIZE
UINT16 mAuthSize; UINT16 mAuthSize;
@ -54,7 +52,7 @@ RdRandGenerateEntropy (
UINT8 *Ptr; UINT8 *Ptr;
Status = EFI_NOT_READY; Status = EFI_NOT_READY;
BlockCount = Length / 64; BlockCount = Length / sizeof(Seed);
Ptr = (UINT8 *)Entropy; Ptr = (UINT8 *)Entropy;
// //
@ -65,10 +63,10 @@ RdRandGenerateEntropy (
if (EFI_ERROR (Status)) { if (EFI_ERROR (Status)) {
return Status; return Status;
} }
CopyMem (Ptr, Seed, 64); CopyMem (Ptr, Seed, sizeof(Seed));
BlockCount--; BlockCount--;
Ptr = Ptr + 64; Ptr = Ptr + sizeof(Seed);
} }
// //
@ -78,7 +76,7 @@ RdRandGenerateEntropy (
if (EFI_ERROR (Status)) { if (EFI_ERROR (Status)) {
return Status; return Status;
} }
CopyMem (Ptr, Seed, (Length % 64)); CopyMem (Ptr, Seed, (Length % sizeof(Seed)));
return Status; return Status;
} }
@ -164,8 +162,6 @@ RandomizePlatformAuth (
{ {
EFI_STATUS Status; EFI_STATUS Status;
UINT16 AuthSize; UINT16 AuthSize;
UINT8 *Rand;
UINTN RandSize;
TPM2B_AUTH NewPlatformAuth; TPM2B_AUTH NewPlatformAuth;
// //
@ -174,19 +170,13 @@ RandomizePlatformAuth (
GetAuthSize (&AuthSize); GetAuthSize (&AuthSize);
ZeroMem (NewPlatformAuth.buffer, AuthSize);
NewPlatformAuth.size = AuthSize; NewPlatformAuth.size = AuthSize;
// //
// Allocate one buffer to store random data. // Create the random bytes in the destination buffer
// //
RandSize = MAX_NEW_AUTHORIZATION_SIZE;
Rand = AllocatePool (RandSize);
RdRandGenerateEntropy (RandSize, Rand); RdRandGenerateEntropy (NewPlatformAuth.size, NewPlatformAuth.buffer);
CopyMem (NewPlatformAuth.buffer, Rand, AuthSize);
FreePool (Rand);
// //
// Send Tpm2HierarchyChangeAuth command with the new Auth value // Send Tpm2HierarchyChangeAuth command with the new Auth value
@ -194,7 +184,6 @@ RandomizePlatformAuth (
Status = Tpm2HierarchyChangeAuth (TPM_RH_PLATFORM, NULL, &NewPlatformAuth); Status = Tpm2HierarchyChangeAuth (TPM_RH_PLATFORM, NULL, &NewPlatformAuth);
DEBUG ((DEBUG_INFO, "Tpm2HierarchyChangeAuth Result: - %r\n", Status)); DEBUG ((DEBUG_INFO, "Tpm2HierarchyChangeAuth Result: - %r\n", Status));
ZeroMem (NewPlatformAuth.buffer, AuthSize); ZeroMem (NewPlatformAuth.buffer, AuthSize);
ZeroMem (Rand, RandSize);
} }
/** /**

View File

@ -1,6 +1,5 @@
### @file ## @file
# # TPM Platform Hierarchy configuration library.
# TPM Platform Hierarchy configuration library.
# #
# This library provides functions for customizing the TPM's Platform Hierarchy # This library provides functions for customizing the TPM's Platform Hierarchy
# Authorization Value (platformAuth) and Platform Hierarchy Authorization # Authorization Value (platformAuth) and Platform Hierarchy Authorization