Reviewed-by: [email protected]
> -----Original Message----- > From: edk2-devel [mailto:[email protected]] On Behalf Of > Dandan Bi > Sent: Monday, November 21, 2016 9:49 AM > To: [email protected] > Cc: Yao, Jiewen <[email protected]> > Subject: [edk2] [PATCH v2] MdeModulePkg/DxeCapsuleLibFmp: Use > AllocatePool for CapsuleResultVariable > > V2: Add check for the result of AllocatePool function. > > Cc: Jiewen Yao <[email protected]> > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Dandan Bi <[email protected]> > --- > .../Library/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 a0ed2d0..2546871 100644 > --- a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c > +++ b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleReportLib.c > @@ -289,36 +289,44 @@ 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); > + 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; > 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 _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

