Move sure FvImage buffer at its alignment when install FVB protocol on it.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4380 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
lgao4
2007-12-10 08:50:24 +00:00
parent 3d5c59747e
commit 38837959db
2 changed files with 63 additions and 14 deletions

View File

@@ -413,8 +413,10 @@ Returns:
UINTN BlockIndex;
UINTN BlockIndex2;
UINTN LinearOffset;
UINT32 FvAlignment;
EFI_FV_BLOCK_MAP_ENTRY *PtrBlockMapEntry;
FvAlignment = 0;
FwVolHeader = (EFI_FIRMWARE_VOLUME_HEADER *)(UINTN)BaseAddress;
//
// Validate FV Header, if not as expected, return
@@ -423,6 +425,19 @@ Returns:
return EFI_VOLUME_CORRUPTED;
}
//
// Get FvHeader alignment
//
FvAlignment = 1 << ((FwVolHeader->Attributes & EFI_FVB2_ALIGNMENT) >> 16);
if (FvAlignment < 8) {
FvAlignment = 8;
}
if ((UINTN)BaseAddress % FvAlignment != 0) {
//
// FvImage buffer is not at its required alignment.
//
return EFI_VOLUME_CORRUPTED;
}
//
// Allocate EFI_FW_VOL_BLOCK_DEVICE
//
FvbDev = CoreAllocateCopyPool (sizeof (EFI_FW_VOL_BLOCK_DEVICE), &mFwVolBlock);