mirror of https://github.com/acidanthera/audk.git
MdeModulePkg/PartitionDxe: Correct the MBR last block value
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2823 PartitionValidMbr function's second parameter should be the last sector of the device. For MBR partition, the block size is sector size, i.e. 512 bytes. The original value is media block last LBA which is counted by the media block size. And media block size is not always 512 bytes, it may be larger which would cause the MBR boundary check incorrect. The boundary check is based on the partition entry start LBA and size of LBA which are both counted by the sector number (512 bytes). Cc: Hao A Wu <hao.a.wu@intel.com> Cc: Ray Ni <ray.ni@intel.com> Signed-off-by: Zhichao Gao <zhichao.gao@intel.com> Reviewed-by: Ray Ni <ray.ni@intel.com>
This commit is contained in:
parent
256c4470f8
commit
a35de0aff3
|
@ -135,14 +135,17 @@ PartitionInstallMbrChildHandles (
|
|||
EFI_DEVICE_PATH_PROTOCOL *LastDevicePathNode;
|
||||
UINT32 BlockSize;
|
||||
UINT32 MediaId;
|
||||
EFI_LBA LastBlock;
|
||||
EFI_LBA LastSector;
|
||||
EFI_PARTITION_INFO_PROTOCOL PartitionInfo;
|
||||
|
||||
Found = EFI_NOT_FOUND;
|
||||
|
||||
BlockSize = BlockIo->Media->BlockSize;
|
||||
MediaId = BlockIo->Media->MediaId;
|
||||
LastBlock = BlockIo->Media->LastBlock;
|
||||
BlockSize = BlockIo->Media->BlockSize;
|
||||
MediaId = BlockIo->Media->MediaId;
|
||||
LastSector = DivU64x32 (
|
||||
MultU64x32 (BlockIo->Media->LastBlock + 1, BlockSize),
|
||||
MBR_SIZE
|
||||
) - 1;
|
||||
|
||||
//
|
||||
// Ensure the block size can hold the MBR
|
||||
|
@ -167,7 +170,7 @@ PartitionInstallMbrChildHandles (
|
|||
Found = Status;
|
||||
goto Done;
|
||||
}
|
||||
if (!PartitionValidMbr (Mbr, LastBlock)) {
|
||||
if (!PartitionValidMbr (Mbr, LastSector)) {
|
||||
goto Done;
|
||||
}
|
||||
//
|
||||
|
|
Loading…
Reference in New Issue