Cc: Jiewen Yao <[email protected]>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Dandan Bi <[email protected]>
---
 .../Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c       | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c 
b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c
index a0ed2d0..237c552 100644
--- a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c
+++ b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c
@@ -289,36 +289,40 @@ RecordFmpCapsuleStatusVariable (
   IN EFI_STATUS                                    CapsuleStatus,
   IN UINTN                                         PayloadIndex,
   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);
+  CapsuleResultVariableSize  = sizeof(EFI_CAPSULE_RESULT_VARIABLE_HEADER) + 
sizeof(EFI_CAPSULE_RESULT_VARIABLE_FMP);
+  CapsuleResultVariable = AllocatePool (CapsuleResultVariableSize);
+  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;
   CopyGuid (&CapsuleResultVariableFmp->UpdateImageTypeId, 
&ImageHeader->UpdateImageTypeId);
 
   //
   // 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;
 }
 
 /**
   Initialize CapsuleMax variables.
-- 
1.9.5.msysgit.1

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to