From: Karel Zak Date: Thu, 13 Nov 2014 13:37:05 +0000 (+0100) Subject: libfdisk: (dos) be sure that sorted EBR list is terminated X-Git-Tag: v2.26-rc1~219 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d0bdf18434bf116e2154b4895e0c3e0c815dbabf;p=thirdparty%2Futil-linux.git libfdisk: (dos) be sure that sorted EBR list is terminated Signed-off-by: Karel Zak --- diff --git a/libfdisk/src/dos.c b/libfdisk/src/dos.c index af09097185..b4456a9477 100644 --- a/libfdisk/src/dos.c +++ b/libfdisk/src/dos.c @@ -1918,6 +1918,7 @@ static int cmp_ebr_offsets(const void *a, const void *b) static void fix_chain_of_logicals(struct fdisk_context *cxt) { struct fdisk_dos_label *l = self_label(cxt); + struct pte *last; size_t i; DBG(LABEL, print_chain_of_logicals(cxt)); @@ -1972,13 +1973,15 @@ again: set_partition(cxt, i, 1, nxt->offset, get_abs_partition_end(nxt), MBR_DOS_EXTENDED_PARTITION, 0); + } - if (i + 1 == cxt->label->nparts_max - 1) { - clear_partition(nxt->ex_entry); - partition_set_changed(cxt, i + 1, 1); - } - + /* always terminate the chain ! */ + last = self_pte(cxt, cxt->label->nparts_max - 1); + if (last) { + clear_partition(last->ex_entry); + partition_set_changed(cxt, cxt->label->nparts_max - 1, 1); } + DBG(LABEL, print_chain_of_logicals(cxt)); }