aboutsummaryrefslogtreecommitdiffstats
path: root/libfdisk/src/script.c
diff options
context:
space:
mode:
authorKarel Zak <kzak@redhat.com>2020-08-12 15:59:38 +0200
committerKarel Zak <kzak@redhat.com>2020-08-12 15:59:38 +0200
commit8bbc11f12ffb7adfc188b7b8885e74d40bd54713 (patch)
treea3e55691c27948b2be7d7e9b64a8e5e553528d21 /libfdisk/src/script.c
parent255f5f4c770ebd46a38b58975bd33e33ae87ed24 (diff)
downloadutil-linux-8bbc11f12ffb7adfc188b7b8885e74d40bd54713.tar.gz
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 <kzak@redhat.com>
Diffstat (limited to 'libfdisk/src/script.c')
-rw-r--r--libfdisk/src/script.c30
1 files changed, 24 insertions, 6 deletions
diff --git a/libfdisk/src/script.c b/libfdisk/src/script.c
index d18ba57376..2a3d1b818b 100644
--- a/libfdisk/src/script.c
+++ b/libfdisk/src/script.c
@@ -1032,8 +1032,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 <num><suffix> */
+ if (pow) { /* specified as <num><suffix> */
+ 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);
}
@@ -1043,9 +1048,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 <num><suffix> */
+ if (pow) { /* specified as <num><suffix> */
+ 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);
@@ -1159,8 +1168,13 @@ static int parse_line_valcommas(struct fdisk_script *dp, char *s)
rc = next_number(&p, &num, &pow);
if (!rc) {
- if (pow) /* specified as <num><suffix> */
+ if (pow) { /* specified as <num><suffix> */
+ 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 :
@@ -1179,9 +1193,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 <size><suffix> */
+ if (pow) { /* specified as <size><suffix> */
+ 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 :