]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Disk/PartitionDxe/Mbr.c
MdeModulePkg/PartitionDxe: Revert changes for the special MBR
[mirror_edk2.git] / MdeModulePkg / Universal / Disk / PartitionDxe / Mbr.c
index 3830af1ea767036fbbc4c66c1deb15053d9f138c..f0c92aa09a596c235050688705db4fc51433922e 100644 (file)
@@ -39,7 +39,6 @@ PartitionValidMbr (
   UINT32  StartingLBA;\r
   UINT32  EndingLBA;\r
   UINT32  NewEndingLBA;\r
-  UINT32  SizeInLBA;\r
   INTN    Index1;\r
   INTN    Index2;\r
   BOOLEAN MbrValid;\r
@@ -52,34 +51,13 @@ PartitionValidMbr (
   //\r
   MbrValid = FALSE;\r
   for (Index1 = 0; Index1 < MAX_MBR_PARTITIONS; Index1++) {\r
-    StartingLBA = UNPACK_UINT32 (Mbr->Partition[Index1].StartingLBA);\r
-    SizeInLBA   = UNPACK_UINT32 (Mbr->Partition[Index1].SizeInLBA);\r
-\r
-    //\r
-    // If the MBR with partition entry covering the ENTIRE disk, i.e. start at LBA0\r
-    // with whole disk size, we treat it as an invalid MBR partition.\r
-    //\r
-    if ((StartingLBA == 0) &&\r
-        (SizeInLBA == (LastLba + 1))) {\r
-      //\r
-      // Refer to the http://manpages.ubuntu.com/manpages/bionic/man8/mkudffs.8.html\r
-      // "WHOLE DISK VS PARTITION"\r
-      // Some linux ISOs may put the MBR table in the first 512 bytes for compatibility reasons with Windows.\r
-      // Linux  kernel  ignores MBR table if contains partition which starts at sector 0.\r
-      // Skip it because we don't have the partition check for UDF(El Torito compatible).\r
-      // It would continue to do the whole disk check in the UDF routine.\r
-      //\r
-      DEBUG ((DEBUG_INFO, "PartitionValidMbr: MBR table has partition entry covering the ENTIRE disk. Don't treat it as a valid MBR.\n"));\r
-\r
-      return FALSE;\r
-    }\r
-\r
-    if (Mbr->Partition[Index1].OSIndicator == 0x00 || SizeInLBA == 0) {\r
+    if (Mbr->Partition[Index1].OSIndicator == 0x00 || UNPACK_UINT32 (Mbr->Partition[Index1].SizeInLBA) == 0) {\r
       continue;\r
     }\r
 \r
     MbrValid    = TRUE;\r
-    EndingLBA   = StartingLBA + SizeInLBA - 1;\r
+    StartingLBA = UNPACK_UINT32 (Mbr->Partition[Index1].StartingLBA);\r
+    EndingLBA   = StartingLBA + UNPACK_UINT32 (Mbr->Partition[Index1].SizeInLBA) - 1;\r
     if (EndingLBA > LastLba) {\r
       //\r
       // Compatibility Errata:\r
@@ -99,15 +77,12 @@ PartitionValidMbr (
     }\r
 \r
     for (Index2 = Index1 + 1; Index2 < MAX_MBR_PARTITIONS; Index2++) {\r
-      StartingLBA = UNPACK_UINT32 (Mbr->Partition[Index2].StartingLBA);\r
-      SizeInLBA   = UNPACK_UINT32 (Mbr->Partition[Index2].SizeInLBA);\r
-\r
-      if (Mbr->Partition[Index2].OSIndicator == 0x00 || SizeInLBA == 0) {\r
+      if (Mbr->Partition[Index2].OSIndicator == 0x00 || UNPACK_UINT32 (Mbr->Partition[Index2].SizeInLBA) == 0) {\r
         continue;\r
       }\r
 \r
-      NewEndingLBA = StartingLBA + SizeInLBA - 1;\r
-      if (NewEndingLBA >= StartingLBA && StartingLBA <= EndingLBA) {\r
+      NewEndingLBA = UNPACK_UINT32 (Mbr->Partition[Index2].StartingLBA) + UNPACK_UINT32 (Mbr->Partition[Index2].SizeInLBA) - 1;\r
+      if (NewEndingLBA >= StartingLBA && UNPACK_UINT32 (Mbr->Partition[Index2].StartingLBA) <= EndingLBA) {\r
         //\r
         // This region overlaps with the Index1'th region\r
         //\r