]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg/DxeCapsuleLibFmp: Use AllocatePool for CapsuleResultVariable
authorDandan Bi <dandan.bi@intel.com>
Fri, 18 Nov 2016 10:33:02 +0000 (18:33 +0800)
committerStar Zeng <star.zeng@intel.com>
Wed, 23 Nov 2016 02:05:47 +0000 (10:05 +0800)
Cc: Jiewen Yao <jiewen.yao@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Dandan Bi <dandan.bi@intel.com>
Reviewed-by: jiewen.yao@intel.com
MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c

index a0ed2d0b7e69b2f77ad5ac6d7e33630f5f95287f..25468712a89459337608ed0f6455c3c3b1f2920c 100644 (file)
@@ -291,19 +291,26 @@ RecordFmpCapsuleStatusVariable (
   IN EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER  *ImageHeader\r
   )\r
 {\r
-  UINT8                               CapsuleResultVariable[sizeof(EFI_CAPSULE_RESULT_VARIABLE_HEADER) + sizeof(EFI_CAPSULE_RESULT_VARIABLE_FMP)];\r
   EFI_CAPSULE_RESULT_VARIABLE_HEADER  *CapsuleResultVariableHeader;\r
   EFI_CAPSULE_RESULT_VARIABLE_FMP     *CapsuleResultVariableFmp;\r
   EFI_STATUS                          Status;\r
+  UINT8                               *CapsuleResultVariable;\r
+  UINT32                              CapsuleResultVariableSize;\r
 \r
-  CapsuleResultVariableHeader = (VOID *)&CapsuleResultVariable[0];\r
-  CapsuleResultVariableHeader->VariableTotalSize = sizeof(CapsuleResultVariable);\r
+  CapsuleResultVariable     = NULL;\r
+  CapsuleResultVariableSize = sizeof(EFI_CAPSULE_RESULT_VARIABLE_HEADER) + sizeof(EFI_CAPSULE_RESULT_VARIABLE_FMP);\r
+  CapsuleResultVariable     = AllocatePool (CapsuleResultVariableSize);\r
+  if (CapsuleResultVariable == NULL) {\r
+    return EFI_OUT_OF_RESOURCES;\r
+  }\r
+  CapsuleResultVariableHeader = (VOID *)CapsuleResultVariable;\r
+  CapsuleResultVariableHeader->VariableTotalSize = CapsuleResultVariableSize;\r
   CopyGuid(&CapsuleResultVariableHeader->CapsuleGuid, &CapsuleHeader->CapsuleGuid);\r
   ZeroMem(&CapsuleResultVariableHeader->CapsuleProcessed, sizeof(CapsuleResultVariableHeader->CapsuleProcessed));\r
   gRT->GetTime(&CapsuleResultVariableHeader->CapsuleProcessed, NULL);\r
   CapsuleResultVariableHeader->CapsuleStatus = CapsuleStatus;\r
 \r
-  CapsuleResultVariableFmp = (VOID *)&CapsuleResultVariable[sizeof(EFI_CAPSULE_RESULT_VARIABLE_HEADER)];\r
+  CapsuleResultVariableFmp = (VOID *)(CapsuleResultVariable + sizeof(EFI_CAPSULE_RESULT_VARIABLE_HEADER));\r
   CapsuleResultVariableFmp->Version = 0x1;\r
   CapsuleResultVariableFmp->PayloadIndex = (UINT8)PayloadIndex;\r
   CapsuleResultVariableFmp->UpdateImageIndex = ImageHeader->UpdateImageIndex;\r
@@ -312,11 +319,12 @@ RecordFmpCapsuleStatusVariable (
   //\r
   // Save Local Cache\r
   //\r
-  Status = WriteNewCapsuleResultVariableCache(&CapsuleResultVariable, sizeof(CapsuleResultVariable));\r
+  Status = WriteNewCapsuleResultVariableCache(CapsuleResultVariable, CapsuleResultVariableSize);\r
 \r
   if ((CapsuleHeader->Flags & CAPSULE_FLAGS_PERSIST_ACROSS_RESET) != 0) {\r
-    Status = WriteNewCapsuleResultVariable(&CapsuleResultVariable, sizeof(CapsuleResultVariable));\r
+    Status = WriteNewCapsuleResultVariable(CapsuleResultVariable, CapsuleResultVariableSize);\r
   }\r
+  FreePool (CapsuleResultVariable);\r
   return Status;\r
 }\r
 \r