Permalink
Browse files

libfdisk: (gpt) add extra check for First/Last LBA

Signed-off-by: Karel Zak <kzak@redhat.com>
  • Loading branch information...
1 parent fb966a7 commit 9d9a1b876094fe38c5539f19a57323437b8b8a0d @karelzak committed Apr 23, 2015
Showing with 18 additions and 2 deletions.
  1. +3 −2 disk-utils/sfdisk.c
  2. +15 −0 libfdisk/src/gpt.c
View
@@ -1216,7 +1216,8 @@ static int command_fdisk(struct sfdisk *sf, int argc, char **argv)
if (!sf->quiet)
fputs(_("Checking that no-one is using this disk right now ..."), stdout);
if (is_device_used(sf)) {
- fputs(_(" FAILED\n\n"), stdout);
+ if (!sf->quiet)
+ fputs(_(" FAILED\n\n"), stdout);
fdisk_warnx(sf->cxt, _(
"This disk is currently in use - repartitioning is probably a bad idea.\n"
@@ -1225,7 +1226,7 @@ static int command_fdisk(struct sfdisk *sf, int argc, char **argv)
if (!sf->force)
errx(EXIT_FAILURE, _("Use the --force flag to overrule all checks."));
- } else
+ } else if (!sf->quiet)
fputs(_(" OK\n\n"), stdout);
}
View
@@ -2182,6 +2182,21 @@ static int gpt_add_partition(
goto done;
}
+ /* Be paranoid and check agains on-disk setting rather than against libfdisk cxt */
+ if (user_l > le64_to_cpu(pheader->last_usable_lba)) {
+ fdisk_warnx(cxt, _("The last usable GPT sector is %ju, but %ju is requested."),
+ le64_to_cpu(pheader->last_usable_lba), user_l);
+ rc = -EINVAL;
+ goto done;
+ }
+
+ if (user_f < le64_to_cpu(pheader->first_usable_lba)) {
+ fdisk_warnx(cxt, _("The first usable GPT sector is %ju, but %ju is requested."),
+ le64_to_cpu(pheader->first_usable_lba), user_f);
+ rc = -EINVAL;
+ goto done;
+ }
+
assert(!FDISK_IS_UNDEF(user_l));
assert(!FDISK_IS_UNDEF(user_f));

0 comments on commit 9d9a1b8

Please sign in to comment.