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
//\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