From b857bf48133933a72f6edcd9bac3214799e093de Mon Sep 17 00:00:00 2001 From: Dandan Bi Date: Fri, 18 Nov 2016 18:33:02 +0800 Subject: [PATCH] MdeModulePkg/DxeCapsuleLibFmp: Use AllocatePool for CapsuleResultVariable Cc: Jiewen Yao Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Dandan Bi Reviewed-by: jiewen.yao@intel.com --- .../DxeCapsuleLibFmp/DxeCapsuleReportLib.c | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c index a0ed2d0b7e..25468712a8 100644 --- a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c +++ b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c @@ -291,19 +291,26 @@ RecordFmpCapsuleStatusVariable ( IN EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER *ImageHeader ) { - UINT8 CapsuleResultVariable[sizeof(EFI_CAPSULE_RESULT_VARIABLE_HEADER) + sizeof(EFI_CAPSULE_RESULT_VARIABLE_FMP)]; EFI_CAPSULE_RESULT_VARIABLE_HEADER *CapsuleResultVariableHeader; EFI_CAPSULE_RESULT_VARIABLE_FMP *CapsuleResultVariableFmp; EFI_STATUS Status; + UINT8 *CapsuleResultVariable; + UINT32 CapsuleResultVariableSize; - CapsuleResultVariableHeader = (VOID *)&CapsuleResultVariable[0]; - CapsuleResultVariableHeader->VariableTotalSize = sizeof(CapsuleResultVariable); + CapsuleResultVariable = NULL; + CapsuleResultVariableSize = sizeof(EFI_CAPSULE_RESULT_VARIABLE_HEADER) + sizeof(EFI_CAPSULE_RESULT_VARIABLE_FMP); + CapsuleResultVariable = AllocatePool (CapsuleResultVariableSize); + if (CapsuleResultVariable == NULL) { + return EFI_OUT_OF_RESOURCES; + } + CapsuleResultVariableHeader = (VOID *)CapsuleResultVariable; + CapsuleResultVariableHeader->VariableTotalSize = CapsuleResultVariableSize; CopyGuid(&CapsuleResultVariableHeader->CapsuleGuid, &CapsuleHeader->CapsuleGuid); ZeroMem(&CapsuleResultVariableHeader->CapsuleProcessed, sizeof(CapsuleResultVariableHeader->CapsuleProcessed)); gRT->GetTime(&CapsuleResultVariableHeader->CapsuleProcessed, NULL); CapsuleResultVariableHeader->CapsuleStatus = CapsuleStatus; - CapsuleResultVariableFmp = (VOID *)&CapsuleResultVariable[sizeof(EFI_CAPSULE_RESULT_VARIABLE_HEADER)]; + CapsuleResultVariableFmp = (VOID *)(CapsuleResultVariable + sizeof(EFI_CAPSULE_RESULT_VARIABLE_HEADER)); CapsuleResultVariableFmp->Version = 0x1; CapsuleResultVariableFmp->PayloadIndex = (UINT8)PayloadIndex; CapsuleResultVariableFmp->UpdateImageIndex = ImageHeader->UpdateImageIndex; @@ -312,11 +319,12 @@ RecordFmpCapsuleStatusVariable ( // // Save Local Cache // - Status = WriteNewCapsuleResultVariableCache(&CapsuleResultVariable, sizeof(CapsuleResultVariable)); + Status = WriteNewCapsuleResultVariableCache(CapsuleResultVariable, CapsuleResultVariableSize); if ((CapsuleHeader->Flags & CAPSULE_FLAGS_PERSIST_ACROSS_RESET) != 0) { - Status = WriteNewCapsuleResultVariable(&CapsuleResultVariable, sizeof(CapsuleResultVariable)); + Status = WriteNewCapsuleResultVariable(CapsuleResultVariable, CapsuleResultVariableSize); } + FreePool (CapsuleResultVariable); return Status; } -- 2.39.2