summaryrefslogtreecommitdiffstats
path: root/SecurityPkg/Hash2DxeCrypto
diff options
context:
space:
mode:
authorYao, Jiewen <Jiewen.Yao@intel.com>2015-08-18 02:11:10 +0000
committerjyao1 <jyao1@Edk2>2015-08-18 02:11:10 +0000
commita3a0974822c02ab38ab7a7d21ab79f4b22d00291 (patch)
tree0a276eea5789b1c5b5bdd78b610e5663533faea5 /SecurityPkg/Hash2DxeCrypto
parent70bd69912ad2fb6e99271b418f87b98ebb36e0d8 (diff)
downloadedk2-a3a0974822c02ab38ab7a7d21ab79f4b22d00291.tar.gz
edk2-a3a0974822c02ab38ab7a7d21ab79f4b22d00291.tar.bz2
edk2-a3a0974822c02ab38ab7a7d21ab79f4b22d00291.zip
Add restriction that HashFinal() must be after at least one HashUpdate().
Just follow UEFI spec. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: "Yao, Jiewen" <Jiewen.Yao@intel.com> Reviewed-by: "Zhang, Chao B" <chao.b.zhang@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18229 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'SecurityPkg/Hash2DxeCrypto')
-rw-r--r--SecurityPkg/Hash2DxeCrypto/Driver.h1
-rw-r--r--SecurityPkg/Hash2DxeCrypto/Hash2DxeCrypto.c7
2 files changed, 7 insertions, 1 deletions
diff --git a/SecurityPkg/Hash2DxeCrypto/Driver.h b/SecurityPkg/Hash2DxeCrypto/Driver.h
index 771aedc1ed..a145858fa0 100644
--- a/SecurityPkg/Hash2DxeCrypto/Driver.h
+++ b/SecurityPkg/Hash2DxeCrypto/Driver.h
@@ -57,6 +57,7 @@ typedef struct {
EFI_HASH2_PROTOCOL Hash2Protocol;
VOID *HashContext;
VOID *HashInfoContext;
+ BOOLEAN Updated;
} HASH2_INSTANCE_DATA;
#define HASH2_INSTANCE_DATA_FROM_THIS(a) \
diff --git a/SecurityPkg/Hash2DxeCrypto/Hash2DxeCrypto.c b/SecurityPkg/Hash2DxeCrypto/Hash2DxeCrypto.c
index 94057ab2e1..ab34de7351 100644
--- a/SecurityPkg/Hash2DxeCrypto/Hash2DxeCrypto.c
+++ b/SecurityPkg/Hash2DxeCrypto/Hash2DxeCrypto.c
@@ -500,6 +500,7 @@ BaseCrypto2HashInit (
//
Instance->HashContext = HashCtx;
Instance->HashInfoContext = HashInfo;
+ Instance->Updated = FALSE;
return EFI_SUCCESS;
}
@@ -551,6 +552,8 @@ BaseCrypto2HashUpdate (
return EFI_OUT_OF_RESOURCES;
}
+ Instance->Updated = TRUE;
+
return EFI_SUCCESS;
}
@@ -590,7 +593,8 @@ BaseCrypto2HashFinal (
// Consistency Check
//
Instance = HASH2_INSTANCE_DATA_FROM_THIS(This);
- if ((Instance->HashContext == NULL) || (Instance->HashInfoContext == NULL)) {
+ if ((Instance->HashContext == NULL) || (Instance->HashInfoContext == NULL) ||
+ (!Instance->Updated)) {
return EFI_NOT_READY;
}
HashInfo = Instance->HashInfoContext;
@@ -604,6 +608,7 @@ BaseCrypto2HashFinal (
FreePool (HashCtx);
Instance->HashInfoContext = NULL;
Instance->HashContext = NULL;
+ Instance->Updated = FALSE;
if (!Ret) {
return EFI_OUT_OF_RESOURCES;