VirtualBox

Ignore:
Timestamp:
Mar 31, 2025 11:31:09 AM (3 weeks ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
168237
Message:

Devices/EFI/FirmwareNew: Merge edk2-stable202502 from the vendor branch and make it build for the important platforms, bugref:4643

Location:
trunk/src/VBox/Devices/EFI/FirmwareNew
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/EFI/FirmwareNew

  • trunk/src/VBox/Devices/EFI/FirmwareNew/FatPkg/FatPei/Gpt.c

    r99404 r108794  
    111111  PEI_FAT_BLOCK_DEVICE  *ParentBlockDev;
    112112  EFI_PEI_LBA           Lba;
    113   EFI_PEI_LBA           AlternateLba;
    114113  EFI_PEI_LBA           EntryArrayLastLba;
    115114
     
    121120
    122121  if (IsPrimaryHeader) {
    123     Lba          = PRIMARY_PART_HEADER_LBA;
    124     AlternateLba = ParentBlockDev->LastBlock;
     122    Lba = PRIMARY_PART_HEADER_LBA;
    125123  } else {
    126     Lba          = ParentBlockDev->LastBlock;
    127     AlternateLba = PRIMARY_PART_HEADER_LBA;
     124    Lba = ParentBlockDev->LastBlock;
    128125  }
    129126
    130127  if ((PartHdr->Header.Signature != EFI_PTAB_HEADER_ID) ||
    131       (PartHdr->Header.Revision != 0x00010000) ||
    132       (PartHdr->Header.HeaderSize < 92) ||
    133       (PartHdr->Header.HeaderSize > ParentBlockDev->BlockSize) ||
    134128      (!PartitionCheckGptHeaderCRC (PartHdr)) ||
    135       (PartHdr->Header.Reserved != 0)
    136       )
    137   {
    138     DEBUG ((DEBUG_ERROR, "Invalid efi partition table header\n"));
    139     return FALSE;
    140   }
    141 
    142   //
    143   // |    Block0    |    Block1    |Block2 ~ FirstUsableLBA - 1|FirstUsableLBA, ... ,LastUsableLBA|LastUsableLBA+1 ~ LastBlock-1|  LastBlock  |
    144   // |Protective MBR|Primary Header|Entry Array(At Least 16384)|             Partition            | Entry Array(At Least 16384) |BackUp Header|
    145   //
    146   // 1. Protective MBR is fixed at Block 0.
    147   // 2. Primary Header is fixed at Block 1.
    148   // 3. Backup Header is fixed at LastBlock.
    149   // 4. Must be remain 128*128 bytes for primary entry array.
    150   // 5. Must be remain 128*128 bytes for backup entry array.
    151   // 6. SizeOfPartitionEntry must be equals to 128 * 2^n.
    152   //
    153   if ((PartHdr->MyLBA != Lba) ||
    154       (PartHdr->AlternateLBA != AlternateLba) ||
    155       (PartHdr->FirstUsableLBA < 2 + EFI_SIZE_TO_BLOCKS (EFI_GPT_PART_ENTRY_MIN_SIZE, ParentBlockDev->BlockSize)) ||
    156       (PartHdr->LastUsableLBA  > ParentBlockDev->LastBlock - 1 - EFI_SIZE_TO_BLOCKS (EFI_GPT_PART_ENTRY_MIN_SIZE, ParentBlockDev->BlockSize)) ||
    157       (PartHdr->FirstUsableLBA > PartHdr->LastUsableLBA) ||
    158       (PartHdr->PartitionEntryLBA < 2) ||
    159       (PartHdr->PartitionEntryLBA > ParentBlockDev->LastBlock - 1) ||
    160       ((PartHdr->PartitionEntryLBA >= PartHdr->FirstUsableLBA) && (PartHdr->PartitionEntryLBA <= PartHdr->LastUsableLBA)) ||
    161       (PartHdr->SizeOfPartitionEntry%128 != 0) ||
    162       (PartHdr->SizeOfPartitionEntry != sizeof (EFI_PARTITION_ENTRY))
     129      (PartHdr->MyLBA != Lba) ||
     130      (PartHdr->SizeOfPartitionEntry < sizeof (EFI_PARTITION_ENTRY))
    163131      )
    164132  {
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette