From 94b7df5c4a6cfb6bd7e80719fe85b11c3408e430 Mon Sep 17 00:00:00 2001 From: Zhichao Gao Date: Wed, 12 Aug 2020 09:07:05 +0800 Subject: MdeModulePkg/PartitionDxe: Revert changes for the special MBR REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2823 Revert "MdeModulePkg/PartitionDxe: Skip the MBR that add for CD-ROM" Follow the spec definition, the ISO 9660 (and UDF) would be checked before the MBR. So it is not required to skip such MBR talbe that contian the entire block device. Cc: Jian J Wang Cc: Hao A Wu Cc: Ray Ni Cc: Gary Lin Cc: Andrew Fish Signed-off-by: Zhichao Gao Reviewed-by: Ray Ni Reviewed-by: Hao A Wu Tested-by: Gary Lin --- MdeModulePkg/Universal/Disk/PartitionDxe/Mbr.c | 37 +++++--------------------- 1 file changed, 6 insertions(+), 31 deletions(-) (limited to 'MdeModulePkg/Universal') diff --git a/MdeModulePkg/Universal/Disk/PartitionDxe/Mbr.c b/MdeModulePkg/Universal/Disk/PartitionDxe/Mbr.c index 3830af1..f0c92aa 100644 --- a/MdeModulePkg/Universal/Disk/PartitionDxe/Mbr.c +++ b/MdeModulePkg/Universal/Disk/PartitionDxe/Mbr.c @@ -39,7 +39,6 @@ PartitionValidMbr ( UINT32 StartingLBA; UINT32 EndingLBA; UINT32 NewEndingLBA; - UINT32 SizeInLBA; INTN Index1; INTN Index2; BOOLEAN MbrValid; @@ -52,34 +51,13 @@ PartitionValidMbr ( // MbrValid = FALSE; for (Index1 = 0; Index1 < MAX_MBR_PARTITIONS; Index1++) { - StartingLBA = UNPACK_UINT32 (Mbr->Partition[Index1].StartingLBA); - SizeInLBA = UNPACK_UINT32 (Mbr->Partition[Index1].SizeInLBA); - - // - // If the MBR with partition entry covering the ENTIRE disk, i.e. start at LBA0 - // with whole disk size, we treat it as an invalid MBR partition. - // - if ((StartingLBA == 0) && - (SizeInLBA == (LastLba + 1))) { - // - // Refer to the http://manpages.ubuntu.com/manpages/bionic/man8/mkudffs.8.html - // "WHOLE DISK VS PARTITION" - // Some linux ISOs may put the MBR table in the first 512 bytes for compatibility reasons with Windows. - // Linux kernel ignores MBR table if contains partition which starts at sector 0. - // Skip it because we don't have the partition check for UDF(El Torito compatible). - // It would continue to do the whole disk check in the UDF routine. - // - DEBUG ((DEBUG_INFO, "PartitionValidMbr: MBR table has partition entry covering the ENTIRE disk. Don't treat it as a valid MBR.\n")); - - return FALSE; - } - - if (Mbr->Partition[Index1].OSIndicator == 0x00 || SizeInLBA == 0) { + if (Mbr->Partition[Index1].OSIndicator == 0x00 || UNPACK_UINT32 (Mbr->Partition[Index1].SizeInLBA) == 0) { continue; } MbrValid = TRUE; - EndingLBA = StartingLBA + SizeInLBA - 1; + StartingLBA = UNPACK_UINT32 (Mbr->Partition[Index1].StartingLBA); + EndingLBA = StartingLBA + UNPACK_UINT32 (Mbr->Partition[Index1].SizeInLBA) - 1; if (EndingLBA > LastLba) { // // Compatibility Errata: @@ -99,15 +77,12 @@ PartitionValidMbr ( } for (Index2 = Index1 + 1; Index2 < MAX_MBR_PARTITIONS; Index2++) { - StartingLBA = UNPACK_UINT32 (Mbr->Partition[Index2].StartingLBA); - SizeInLBA = UNPACK_UINT32 (Mbr->Partition[Index2].SizeInLBA); - - if (Mbr->Partition[Index2].OSIndicator == 0x00 || SizeInLBA == 0) { + if (Mbr->Partition[Index2].OSIndicator == 0x00 || UNPACK_UINT32 (Mbr->Partition[Index2].SizeInLBA) == 0) { continue; } - NewEndingLBA = StartingLBA + SizeInLBA - 1; - if (NewEndingLBA >= StartingLBA && StartingLBA <= EndingLBA) { + NewEndingLBA = UNPACK_UINT32 (Mbr->Partition[Index2].StartingLBA) + UNPACK_UINT32 (Mbr->Partition[Index2].SizeInLBA) - 1; + if (NewEndingLBA >= StartingLBA && UNPACK_UINT32 (Mbr->Partition[Index2].StartingLBA) <= EndingLBA) { // // This region overlaps with the Index1'th region // -- cgit v1.1