}\r
FmpImageSize = (UINTN)EndOfPayload - ItemOffsetList[Index];\r
\r
- if (FmpImageSize < OFFSET_OF(EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER, UpdateHardwareInstance)) {\r
- DEBUG((DEBUG_ERROR, "FmpImageSize(0x%lx) < EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER\n", FmpImageSize));\r
- return EFI_INVALID_PARAMETER;\r
- }\r
FmpImageHeaderSize = sizeof(EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER);\r
if ((ImageHeader->Version > EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION) ||\r
(ImageHeader->Version < 1)) {\r
if (ImageHeader->Version < EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION) {\r
FmpImageHeaderSize = OFFSET_OF(EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER, UpdateHardwareInstance);\r
}\r
+ if (FmpImageSize < FmpImageHeaderSize) {\r
+ DEBUG((DEBUG_ERROR, "FmpImageSize(0x%lx) < FmpImageHeaderSize(0x%x)\n", FmpImageSize, FmpImageHeaderSize));\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
\r
// No overflow\r
if (FmpImageSize != (UINT64)FmpImageHeaderSize + (UINT64)ImageHeader->UpdateImageSize + (UINT64)ImageHeader->UpdateVendorCodeSize) {\r
UINT8 *Image;\r
VOID *VendorCode;\r
CHAR16 *AbortReason;\r
+ EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS ProgressCallback;\r
\r
Status = gBS->HandleProtocol(\r
Handle,\r
//\r
// Before calling SetImage(), reset the progress bar to 0%\r
//\r
- UpdateImageProgress (0);\r
+ ProgressCallback = UpdateImageProgress;\r
+ Status = UpdateImageProgress (0);\r
+ if (EFI_ERROR (Status)) {\r
+ ProgressCallback = NULL;\r
+ }\r
\r
Status = Fmp->SetImage(\r
Fmp,\r
Image, // Image\r
ImageHeader->UpdateImageSize, // ImageSize\r
VendorCode, // VendorCode\r
- UpdateImageProgress, // Progress\r
+ ProgressCallback, // Progress\r
&AbortReason // AbortReason\r
);\r
//\r
// Set the progress bar to 100% after returning from SetImage()\r
//\r
- UpdateImageProgress (100);\r
+ if (ProgressCallback != NULL) {\r
+ UpdateImageProgress (100);\r
+ }\r
\r
DEBUG((DEBUG_INFO, "Fmp->SetImage - %r\n", Status));\r
if (AbortReason != NULL) {\r
\r
//\r
// Update EsrtEntry For V1, V2 FMP instance.\r
- // V3 FMP ESRT cache will be synced up through EsrtSyncFmp interface\r
+ // V3 FMP ESRT cache will be synced up through SyncEsrtFmp interface\r
//\r
FmpImageInfoDescriptorVer = GetFmpImageInfoDescriptorVer (Handle);\r
if (FmpImageInfoDescriptorVer < EFI_FIRMWARE_IMAGE_DESCRIPTOR_VERSION) {\r
}\r
\r
//\r
- // Press EFI FMP Capsule\r
+ // Process EFI FMP Capsule\r
//\r
DEBUG((DEBUG_INFO, "ProcessFmpCapsuleImage ...\n"));\r
Status = ProcessFmpCapsuleImage(CapsuleHeader);\r