]> git.proxmox.com Git - mirror_edk2.git/blobdiff - SignedCapsulePkg/Universal/RecoveryModuleLoadPei/RecoveryModuleLoadPei.c
SignedCapsulePkg: Add FMP Capsule Image Header extension
[mirror_edk2.git] / SignedCapsulePkg / Universal / RecoveryModuleLoadPei / RecoveryModuleLoadPei.c
index 53b821c2bb26bf400823c37f5abe8bb872a46669..af8e5cb84c1088026c9cd4a2b848b070e27fe9ea 100644 (file)
@@ -328,8 +328,14 @@ ValidateFmpCapsule (
       DEBUG((DEBUG_ERROR, "ImageHeader->Version(0x%x) Unknown\n", ImageHeader->Version));\r
       return EFI_INVALID_PARAMETER;\r
     }\r
-    if (ImageHeader->Version < EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION) {\r
+    ///\r
+    /// Current Init ImageHeader version is 3. UpdateHardwareInstance field was added in version 2\r
+    /// and ImageCapsuleSupport field was added in version 3\r
+    ///\r
+    if (ImageHeader->Version == 1) {\r
       FmpImageHeaderSize = OFFSET_OF(EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER, UpdateHardwareInstance);\r
+    } else if (ImageHeader->Version == 2){\r
+      FmpImageHeaderSize = OFFSET_OF(EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER, ImageCapsuleSupport);\r
     }\r
 \r
     // No overflow\r
@@ -639,9 +645,14 @@ ProcessFmpCapsuleImage (
     } else {\r
       //\r
       // If the EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER is version 1, only match ImageTypeId.\r
-      // Header should exclude UpdateHardwareInstance field\r
+      // Header should exclude UpdateHardwareInstance field.\r
+      // If version is 2 Header should exclude ImageCapsuleSupport field.\r
       //\r
-      Image = (UINT8 *)ImageHeader + OFFSET_OF(EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER, UpdateHardwareInstance);\r
+      if (ImageHeader->Version == 1) {\r
+        Image = (UINT8 *)ImageHeader + OFFSET_OF(EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER, UpdateHardwareInstance);\r
+      } else {\r
+        Image = (UINT8 *)ImageHeader + OFFSET_OF(EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER, ImageCapsuleSupport);\r
+      }\r
     }\r
 \r
     Status = ProcessRecoveryImage (Image, ImageHeader->UpdateImageSize);\r