BOOLEAN mMeasureGptTableFlag = FALSE;\r
EFI_GUID mZeroGuid = {0, 0, 0, {0, 0, 0, 0, 0, 0, 0, 0}};\r
UINTN mMeasureGptCount = 0;\r
+VOID *mFileBuffer;\r
+UINTN mImageSize;\r
\r
/**\r
Reads contents of a PE/COFF image in memory buffer.\r
OUT VOID *Buffer\r
)\r
{\r
+ UINTN EndPosition;\r
+\r
+ if (FileHandle == NULL || ReadSize == NULL || Buffer == NULL) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ if (MAX_ADDRESS - FileOffset < *ReadSize) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ EndPosition = FileOffset + *ReadSize;\r
+ if (EndPosition > mImageSize) {\r
+ *ReadSize = (UINT32)(mImageSize - FileOffset);\r
+ }\r
+\r
+ if (FileOffset >= mImageSize) {\r
+ *ReadSize = 0;\r
+ }\r
+\r
CopyMem (Buffer, (UINT8 *)((UINTN) FileHandle + FileOffset), *ReadSize);\r
+\r
return EFI_SUCCESS;\r
}\r
\r
if (ImageSize > SumOfBytesHashed) {\r
HashBase = (UINT8 *) (UINTN) ImageAddress + SumOfBytesHashed;\r
if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) {\r
+ if (ImageSize - SumOfBytesHashed < Hdr.Pe32->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_SECURITY].Size) {\r
+ Status = EFI_INVALID_PARAMETER;\r
+ goto Finish;\r
+ }\r
//\r
// Use PE32 offset\r
//\r
Hdr.Pe32->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_SECURITY].Size -\r
SumOfBytesHashed);\r
} else {\r
+ if (ImageSize - SumOfBytesHashed < Hdr.Pe32Plus->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_SECURITY].Size) {\r
+ Status = EFI_INVALID_PARAMETER;\r
+ goto Finish;\r
+ }\r
//\r
// Use PE32+ offset\r
//\r
goto Finish;\r
}\r
\r
+ mImageSize = FileSize;\r
+ mFileBuffer = FileBuffer;\r
+\r
//\r
// Measure PE Image\r
//\r