summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--SecurityPkg/Hash2DxeCrypto/Hash2DxeCrypto.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/SecurityPkg/Hash2DxeCrypto/Hash2DxeCrypto.c b/SecurityPkg/Hash2DxeCrypto/Hash2DxeCrypto.c
index dab0299236..94057ab2e1 100644
--- a/SecurityPkg/Hash2DxeCrypto/Hash2DxeCrypto.c
+++ b/SecurityPkg/Hash2DxeCrypto/Hash2DxeCrypto.c
@@ -358,6 +358,7 @@ BaseCrypto2Hash (
UINTN CtxSize;
BOOLEAN Ret;
EFI_STATUS Status;
+ HASH2_INSTANCE_DATA *Instance;
Status = EFI_SUCCESS;
@@ -373,6 +374,13 @@ BaseCrypto2Hash (
if (HashInfo == NULL) {
return EFI_UNSUPPORTED;
}
+
+ Instance = HASH2_INSTANCE_DATA_FROM_THIS(This);
+ if (Instance->HashContext != NULL) {
+ FreePool (Instance->HashContext);
+ }
+ Instance->HashInfoContext = NULL;
+ Instance->HashContext = NULL;
//
// Start hash sequence
@@ -392,6 +400,12 @@ BaseCrypto2Hash (
goto Done;
}
+ //
+ // Setup the context
+ //
+ Instance->HashContext = HashCtx;
+ Instance->HashInfoContext = HashInfo;
+
Ret = HashInfo->Update (HashCtx, Message, MessageSize);
if (!Ret) {
Status = EFI_OUT_OF_RESOURCES;
@@ -404,7 +418,12 @@ BaseCrypto2Hash (
goto Done;
}
Done:
+ //
+ // Cleanup the context
+ //
FreePool (HashCtx);
+ Instance->HashInfoContext = NULL;
+ Instance->HashContext = NULL;
return Status;
}