]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libfdisk: (gpt) more robust PMBR partition size check
authorKarel Zak <kzak@redhat.com>
Mon, 2 Sep 2013 11:15:09 +0000 (13:15 +0200)
committerKarel Zak <kzak@redhat.com>
Mon, 16 Sep 2013 14:47:09 +0000 (16:47 +0200)
According UEFI specification at least one (does not mean that the
first) partition is 0xFF, it makes sense to check the size of the
partition rather than check the first partition.

Signed-off-by: Karel Zak <kzak@redhat.com>
libfdisk/src/gpt.c

index eed7a6f06cefe1bf562b9ea0b982ceb289608f64..4f2335024b5a3614dd9aef29246ec0e5d5383674 100644 (file)
@@ -460,7 +460,7 @@ static int gpt_mknew_header(struct fdisk_context *cxt,
  */
 static int valid_pmbr(struct fdisk_context *cxt)
 {
-       int i, ret = 0; /* invalid by default */
+       int i, part = 0, ret = 0; /* invalid by default */
        struct gpt_legacy_mbr *pmbr = NULL;
 
        if (!cxt->firstsector)
@@ -484,6 +484,7 @@ static int valid_pmbr(struct fdisk_context *cxt)
                         * now check if there are other partition types for
                         * hybrid MBR.
                         */
+                       part = i;
                        ret = GPT_MBR_PROTECTIVE;
                        goto check_hybrid;
                }
@@ -504,7 +505,7 @@ check_hybrid:
         * Hybrid MBRs do not necessarily comply with this.
         */
        if (ret == GPT_MBR_PROTECTIVE) {
-               if (le32_to_cpu(pmbr->partition_record[0].size_in_lba) !=
+               if (le32_to_cpu(pmbr->partition_record[part].size_in_lba) !=
                    min((uint32_t) cxt->total_sectors - 1, 0xFFFFFFFF))
                        ret = 0;
        }