]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Core/Pei/FwVol/FwVol.c
Update PeiCore and DxeCore to verify FFS data checksum.
[mirror_edk2.git] / MdeModulePkg / Core / Pei / FwVol / FwVol.c
index c40f0ea86b0df654d7c79d9e17397c6b88e06325..941657c07f9d4b2e0ed2430b7571af08791d7299 100644 (file)
@@ -162,6 +162,7 @@ FindFileEx (
   UINT64                                FvLength;\r
   UINT8                                 ErasePolarity;\r
   UINT8                                 FileState;\r
+  UINT8                                 DataCheckSum;\r
   \r
   //\r
   // Convert the handle of FV to FV header for memory-mapped firmware volume\r
@@ -219,6 +220,16 @@ FindFileEx (
       FileLength       = *(UINT32 *)(FfsFileHeader->Size) & 0x00FFFFFF;\r
       FileOccupiedSize = GET_OCCUPIED_SIZE(FileLength, 8);\r
 \r
+      DataCheckSum = FFS_FIXED_CHECKSUM;\r
+      if ((FfsFileHeader->Attributes & FFS_ATTRIB_CHECKSUM) == FFS_ATTRIB_CHECKSUM) {\r
+        DataCheckSum = CalculateCheckSum8 ((CONST UINT8 *)FfsFileHeader + sizeof(EFI_FFS_FILE_HEADER), FileLength - sizeof(EFI_FFS_FILE_HEADER));\r
+      }\r
+      if (FfsFileHeader->IntegrityCheck.Checksum.File != DataCheckSum) {\r
+        ASSERT (FALSE);\r
+        *FileHeader = NULL;\r
+        return EFI_NOT_FOUND;\r
+      }\r
+\r
       if (FileName != NULL) {\r
         if (CompareGuid (&FfsFileHeader->Name, (EFI_GUID*)FileName)) {\r
           *FileHeader = FfsFileHeader;\r