From 38837959db04259d0dbfc1ab906330961d5f9d8e Mon Sep 17 00:00:00 2001 From: lgao4 Date: Mon, 10 Dec 2007 08:50:24 +0000 Subject: 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 --- MdeModulePkg/Core/Dxe/FwVolBlock/FwVolBlock.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'MdeModulePkg/Core/Dxe/FwVolBlock') diff --git a/MdeModulePkg/Core/Dxe/FwVolBlock/FwVolBlock.c b/MdeModulePkg/Core/Dxe/FwVolBlock/FwVolBlock.c index bdac781776..d507167594 100644 --- a/MdeModulePkg/Core/Dxe/FwVolBlock/FwVolBlock.c +++ b/MdeModulePkg/Core/Dxe/FwVolBlock/FwVolBlock.c @@ -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); -- cgit v1.2.3