From: Karel Zak Date: Tue, 11 Jul 2017 12:24:32 +0000 (+0200) Subject: libfdisk: (dos) accept start for log.partitions on template X-Git-Tag: v2.30.1~13 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=16c77fad03105f29b7d572a1af959f8ceb41f791;p=thirdparty%2Futil-linux.git libfdisk: (dos) accept start for log.partitions on template Signed-off-by: Karel Zak --- diff --git a/libfdisk/src/dos.c b/libfdisk/src/dos.c index da21b0956a..44d0221552 100644 --- a/libfdisk/src/dos.c +++ b/libfdisk/src/dos.c @@ -1606,16 +1606,22 @@ static int dos_add_partition(struct fdisk_context *cxt, rc = add_partition(cxt, res, pa); goto done; - /* D) template specifies default start, partno >= 4; add logical */ - } else if (pa && fdisk_partition_start_is_default(pa) + /* D) template specifies start (or default), partno >= 4; add logical */ + } else if (pa && (fdisk_partition_start_is_default(pa) || fdisk_partition_has_start(pa)) && fdisk_partition_has_partno(pa) && pa->partno >= 4) { DBG(LABEL, ul_debug("DOS: pa template %p: add logical (by partno)", pa)); if (!ext_pe) { - fdisk_warnx(cxt, _("Extended partition does not exists. Failed to add logical partition")); + fdisk_warnx(cxt, _("Extended partition does not exists. Failed to add logical partition.")); + return -EINVAL; + } else if (fdisk_partition_has_start(pa) + && pa->start < l->ext_offset + && pa->start > get_abs_partition_end(ext_pe)) { + DBG(LABEL, ul_debug("DOS: pa template specifies partno>=4, but start out of extended")); return -EINVAL; } + rc = add_logical(cxt, pa, &res); goto done; }