//\r
Status = FmpDeviceCheckImageWithStatus ((((UINT8 *)Image) + AllHeaderSize), RawSize, ImageUpdatable, LastAttemptStatus);\r
if (EFI_ERROR (Status)) {\r
+ // The image cannot be valid if an error occurred checking the image\r
+ if (*ImageUpdatable == IMAGE_UPDATABLE_VALID) {\r
+ *ImageUpdatable = IMAGE_UPDATABLE_INVALID;\r
+ }\r
+\r
DEBUG ((DEBUG_ERROR, "FmpDxe(%s): CheckTheImage() - FmpDeviceLib CheckImage failed. Status = %r\n", mImageIdName, Status));\r
+ }\r
\r
+ //\r
+ // Only validate the library last attempt status code if the image is not updatable.\r
+ // This specifically avoids converting LAST_ATTEMPT_STATUS_SUCCESS if it set for an updatable image.\r
+ //\r
+ if (*ImageUpdatable != IMAGE_UPDATABLE_VALID) {\r
//\r
// LastAttemptStatus returned from the device library should fall within the designated error range\r
// [LAST_ATTEMPT_STATUS_DEVICE_LIBRARY_MIN_ERROR_CODE_VALUE, LAST_ATTEMPT_STATUS_DEVICE_LIBRARY_MAX_ERROR_CODE_VALUE]\r
if ((*LastAttemptStatus < LAST_ATTEMPT_STATUS_DEVICE_LIBRARY_MIN_ERROR_CODE_VALUE) ||\r
(*LastAttemptStatus > LAST_ATTEMPT_STATUS_DEVICE_LIBRARY_MAX_ERROR_CODE_VALUE))\r
{\r
- DEBUG (\r
- (DEBUG_ERROR,\r
- "FmpDxe(%s): CheckTheImage() - LastAttemptStatus %d from FmpDeviceCheckImageWithStatus() is invalid.\n",\r
- mImageIdName,\r
- *LastAttemptStatus)\r
- );\r
+ DEBUG ((\r
+ DEBUG_ERROR,\r
+ "FmpDxe(%s): CheckTheImage() - LastAttemptStatus %d from FmpDeviceCheckImageWithStatus() is invalid.\n",\r
+ mImageIdName,\r
+ *LastAttemptStatus\r
+ ));\r
*LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL;\r
}\r
}\r