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
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