Add more check to make sure the valid pointer be used.

Signed-off-by: lgao4
Reviewed-by: rsun3

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12886 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
lgao4 2011-12-19 09:00:58 +00:00
parent dc458c90b3
commit bdc9d5a5d5
1 changed files with 29 additions and 27 deletions

View File

@ -745,40 +745,42 @@ FvIsBeingProcesssed (
// //
// Get the full FV header based on FVB protocol. // Get the full FV header based on FVB protocol.
// //
ASSERT (Fvb != NULL);
Status = GetFwVolHeader (Fvb, &FwVolHeader); Status = GetFwVolHeader (Fvb, &FwVolHeader);
if (EFI_ERROR (Status)) { if (!EFI_ERROR (Status)) {
FwVolHeader = NULL; ASSERT (FwVolHeader != NULL);
} else if (VerifyFvHeaderChecksum (FwVolHeader) && FwVolHeader->ExtHeaderOffset != 0) { if (VerifyFvHeaderChecksum (FwVolHeader) && FwVolHeader->ExtHeaderOffset != 0) {
ExtHeaderOffset = (UINT32) FwVolHeader->ExtHeaderOffset; ExtHeaderOffset = (UINT32) FwVolHeader->ExtHeaderOffset;
BlockMap = FwVolHeader->BlockMap; BlockMap = FwVolHeader->BlockMap;
LbaIndex = 0; LbaIndex = 0;
LbaOffset = 0; LbaOffset = 0;
// //
// Find LbaIndex and LbaOffset for FV extension header based on BlockMap. // Find LbaIndex and LbaOffset for FV extension header based on BlockMap.
// //
while ((BlockMap->NumBlocks != 0) || (BlockMap->Length != 0)) { while ((BlockMap->NumBlocks != 0) || (BlockMap->Length != 0)) {
for (Index = 0; Index < BlockMap->NumBlocks && ExtHeaderOffset >= BlockMap->Length; Index ++) { for (Index = 0; Index < BlockMap->NumBlocks && ExtHeaderOffset >= BlockMap->Length; Index ++) {
ExtHeaderOffset -= BlockMap->Length; ExtHeaderOffset -= BlockMap->Length;
LbaIndex ++; LbaIndex ++;
}
//
// Check whether FvExtHeader is crossing the multi block range.
//
if (Index < BlockMap->NumBlocks) {
LbaOffset = ExtHeaderOffset;
break;
}
BlockMap++;
} }
// //
// Check whether FvExtHeader is crossing the multi block range. // Read FvNameGuid from FV extension header.
// //
if (Index < BlockMap->NumBlocks) { Status = ReadFvbData (Fvb, &LbaIndex, &LbaOffset, sizeof (FvNameGuid), (UINT8 *) &FvNameGuid);
LbaOffset = ExtHeaderOffset; if (!EFI_ERROR (Status)) {
break; FvNameGuidIsFound = TRUE;
} }
BlockMap++;
}
//
// Read FvNameGuid from FV extension header.
//
Status = ReadFvbData (Fvb, &LbaIndex, &LbaOffset, sizeof (FvNameGuid), (UINT8 *) &FvNameGuid);
if (!EFI_ERROR (Status)) {
FvNameGuidIsFound = TRUE;
} }
CoreFreePool (FwVolHeader);
} }
CoreFreePool (FwVolHeader);
} }
if (FvNameGuidIsFound) { if (FvNameGuidIsFound) {