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 <jian.j.w...@intel.com>
Cc: Hao A Wu <hao.a...@intel.com>
Cc: Ray Ni <ray...@intel.com>
Cc: Gary Lin <g...@suse.com>
Cc: Andrew Fish <af...@apple.com>
Signed-off-by: Zhichao Gao <zhichao....@intel.com>
---
 .../Universal/Disk/PartitionDxe/Mbr.c         | 37 +++----------------
 1 file changed, 6 insertions(+), 31 deletions(-)

diff --git a/MdeModulePkg/Universal/Disk/PartitionDxe/Mbr.c 
b/MdeModulePkg/Universal/Disk/PartitionDxe/Mbr.c
index 3830af1ea7..f0c92aa09a 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
         //
-- 
2.21.0.windows.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#64025): https://edk2.groups.io/g/devel/message/64025
Mute This Topic: https://groups.io/mt/76139483/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to