/** @file Shared GUID Partition Table (GPT) parsing and validation routines. These routines decode and validate a disk partitioned with the GPT scheme as described in the UEFI specification. They are shared between the Partition driver (which installs child handles) and other consumers that need to parse the same on-disk GPT layout. Caution: These routines may receive untrusted input. The GPT partition table is external input and must be validated carefully to avoid security issues like buffer overflow and integer overflow. Copyright (c) 2026, SUSE LLC. All rights reserved.
Copyright (c) 2018 Qualcomm Datacenter Technologies, Inc. Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #pragma once #include #include #include #include // // GPT Partition Entry Status // typedef struct { BOOLEAN OutOfRange; BOOLEAN Overlap; BOOLEAN OsSpecific; } EFI_PARTITION_ENTRY_STATUS; /** Read GPT partition table header from the given LBA and validate it. Caution: This function may receive untrusted input. The GPT partition table header is external input, so this routine will do basic validation for GPT partition table header before return. @param[in] BlockIo Parent BlockIo interface. @param[in] DiskIo Disk Io protocol. @param[in] Lba The starting Lba of the Partition Table. @param[out] PartHeader Stores the partition table that is read. @retval TRUE The partition table is valid. @retval FALSE The partition table is not valid. **/ BOOLEAN PartitionValidGptTable ( IN EFI_BLOCK_IO_PROTOCOL *BlockIo, IN EFI_DISK_IO_PROTOCOL *DiskIo, IN EFI_LBA Lba, OUT EFI_PARTITION_TABLE_HEADER *PartHeader ); /** Restore Partition Table to its alternate place (Primary -> Backup or Backup -> Primary). @param[in] BlockIo Parent BlockIo interface. @param[in] DiskIo Disk Io Protocol. @param[in] PartHeader Partition table header structure. @retval TRUE Restoring succeeds. @retval FALSE Restoring failed. **/ BOOLEAN PartitionRestoreGptTable ( IN EFI_BLOCK_IO_PROTOCOL *BlockIo, IN EFI_DISK_IO_PROTOCOL *DiskIo, IN EFI_PARTITION_TABLE_HEADER *PartHeader ); /** Check GPT partition entries and report the status of each entry. Caution: This function may receive untrusted input. The GPT partition entry is external input, so this routine will do basic validation for GPT partition entry and report status. @param[in] PartHeader Partition table header structure. @param[in] PartEntry The partition entry array. @param[out] PEntryStatus The partition entry status array recording the status of each partition. **/ VOID PartitionCheckGptEntry ( IN EFI_PARTITION_TABLE_HEADER *PartHeader, IN EFI_PARTITION_ENTRY *PartEntry, OUT EFI_PARTITION_ENTRY_STATUS *PEntryStatus );