]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
boot: reject GPT headers with SizeOfPartitionEntry below the minimum
authorLuca Boccassi <luca.boccassi@gmail.com>
Fri, 26 Jun 2026 16:15:38 +0000 (17:15 +0100)
committerLuca Boccassi <luca.boccassi@gmail.com>
Fri, 3 Jul 2026 08:13:48 +0000 (09:13 +0100)
Commit 0cf5f816f22c replaced the original lower-bound check

    if (h->SizeOfPartitionEntry < sizeof(EFI_PARTITION_ENTRY))
            return false;

with a multiple-of check

    if ((h->SizeOfPartitionEntry % sizeof(EFI_PARTITION_ENTRY)) != 0)
            return false;

to additionally require the entry size to be a multiple of 128. The
modulo test is however also satisfied by SizeOfPartitionEntry == 0, so a
GPT header advertising a zero entry size now passes verify_gpt().

Restore the lower bound in addition to the multiple-of check, so the
entry size must be at least sizeof(EFI_PARTITION_ENTRY) and a multiple of
it (128 bytes).

Follow-up for 0cf5f816f22c78740e122dfb6b3942ba4241717b

src/boot/part-discovery.c

index ab553a6530bbc019b66125f9e391343a08fadc0b..10ba524125407ca0f89cd5ae006900dbc6a34e6e 100644 (file)
@@ -60,7 +60,8 @@ static bool verify_gpt(/* const */ GptHeader *h, EFI_LBA lba_expected) {
         if (h->MyLBA != lba_expected)
                 return false;
 
-        if ((h->SizeOfPartitionEntry % sizeof(EFI_PARTITION_ENTRY)) != 0)
+        if (h->SizeOfPartitionEntry < sizeof(EFI_PARTITION_ENTRY) ||
+            (h->SizeOfPartitionEntry % sizeof(EFI_PARTITION_ENTRY)) != 0)
                 return false;
 
         if (h->NumberOfPartitionEntries <= 0 || h->NumberOfPartitionEntries > 1024)