From: Karel Zak Date: Wed, 12 Aug 2020 13:59:38 +0000 (+0200) Subject: libfdisk: (script) don't use sector size if not specified X-Git-Tag: v2.36.1~68 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=599c6d8eb0b7ebe219c2d8650862e2e989c208c7;p=thirdparty%2Futil-linux.git libfdisk: (script) don't use sector size if not specified This is probably bad script API use, but better be safe than sorry. Signed-off-by: Karel Zak --- diff --git a/libfdisk/src/script.c b/libfdisk/src/script.c index 82619b9c76..8f3c137a52 100644 --- a/libfdisk/src/script.c +++ b/libfdisk/src/script.c @@ -1028,8 +1028,13 @@ static int parse_line_nameval(struct fdisk_script *dp, char *s) p += 6; rc = next_number(&p, &num, &pow); if (!rc) { - if (pow) /* specified as */ + if (pow) { /* specified as */ + if (!dp->cxt->sector_size) { + rc = -EINVAL; + break; + } num /= dp->cxt->sector_size; + } fdisk_partition_set_start(pa, num); fdisk_partition_start_follow_default(pa, 0); } @@ -1039,9 +1044,13 @@ static int parse_line_nameval(struct fdisk_script *dp, char *s) p += 5; rc = next_number(&p, &num, &pow); if (!rc) { - if (pow) /* specified as */ + if (pow) { /* specified as */ + if (!dp->cxt->sector_size) { + rc = -EINVAL; + break; + } num /= dp->cxt->sector_size; - else /* specified as number of sectors */ + } else /* specified as number of sectors */ fdisk_partition_size_explicit(pa, 1); fdisk_partition_set_size(pa, num); fdisk_partition_end_follow_default(pa, 0); @@ -1155,8 +1164,13 @@ static int parse_line_valcommas(struct fdisk_script *dp, char *s) rc = next_number(&p, &num, &pow); if (!rc) { - if (pow) /* specified as */ + if (pow) { /* specified as */ + if (!dp->cxt->sector_size) { + rc = -EINVAL; + break; + } num /= dp->cxt->sector_size; + } fdisk_partition_set_start(pa, num); pa->movestart = sign == TK_MINUS ? FDISK_MOVE_DOWN : sign == TK_PLUS ? FDISK_MOVE_UP : @@ -1175,9 +1189,13 @@ static int parse_line_valcommas(struct fdisk_script *dp, char *s) int pow = 0; rc = next_number(&p, &num, &pow); if (!rc) { - if (pow) /* specified as */ + if (pow) { /* specified as */ + if (!dp->cxt->sector_size) { + rc = -EINVAL; + break; + } num /= dp->cxt->sector_size; - else /* specified as number of sectors */ + } else /* specified as number of sectors */ fdisk_partition_size_explicit(pa, 1); fdisk_partition_set_size(pa, num); pa->resize = sign == TK_MINUS ? FDISK_RESIZE_REDUCE :