ptgen: fix protective MBR partition size
authorMikhail Kshevetskiy <[email protected]>
Mon, 30 Dec 2024 01:48:47 +0000 (04:48 +0300)
committerDaniel Golle <[email protected]>
Tue, 23 Sep 2025 22:15:33 +0000 (23:15 +0100)
Creating gpt partition with ptgen results in invalid PMBR.

Steps to reproduce:
1) compile ptgen with WANT_ALTERNATE_PTABLE

   gcc -Wall -DWANT_ALTERNATE_PTABLE -o ptgen ptgen.c cyg_crc32.c

2) Create an image with ptgen

   ./ptgen -g -o s.img -p 509m

3) Investigate an image with /sbin/fdisk

   /sbin/fdisk s.img

4) fdisk reports GPT PMBR size mismatch

   Welcome to fdisk (util-linux 2.40.2).
   Changes will remain in memory only, until you decide to write them.
   Be careful before using the write command.

   GPT PMBR size mismatch (1042497 != 1042498) will be corrected by write.

   Command (m for help):

Signed-off-by: Mikhail Kshevetskiy <[email protected]>
src/ptgen.c

index 24861a0453f962d2fce3af56c21b18d3ab5fcd1b..cc5e744de85fce3712540b0f1b7e08692966255b 100644 (file)
@@ -490,7 +490,7 @@ static int gen_gptable(uint32_t signature, guid_t guid, unsigned nr)
 
        pte[0].type = 0xEE;
        pte[0].start = cpu_to_le32(GPT_HEADER_SECTOR);
-       pte[0].length = cpu_to_le32(end - GPT_HEADER_SECTOR);
+       pte[0].length = cpu_to_le32(end + 1 - GPT_HEADER_SECTOR);
        to_chs(GPT_HEADER_SECTOR, pte[0].chs_start);
        to_chs(end, pte[0].chs_end);