From: Karel Zak Date: Mon, 10 Aug 2020 09:37:32 +0000 (+0200) Subject: libfdisk: fix last free sector detection if partition size specified X-Git-Tag: v2.37-rc1~529 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4fe7f9b614e2b5bb97f6d89af02acb867cffccc1;p=thirdparty%2Futil-linux.git libfdisk: fix last free sector detection if partition size specified We need to skip useless gaps between partition if the gap is no large enough for a new partition. Unfortunately, the current code checks size of the gap, but does not care for location of the gap -- this is good enough for dialog driven partitioning, but it's pretty bad if start of the partition is explicitly specified (e.g. sfdisk). Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1860461 Signed-off-by: Karel Zak --- diff --git a/libfdisk/src/dos.c b/libfdisk/src/dos.c index 1769698835..890e33a262 100644 --- a/libfdisk/src/dos.c +++ b/libfdisk/src/dos.c @@ -1274,14 +1274,14 @@ static int add_partition(struct fdisk_context *cxt, size_t n, fdisk_sector_t last; rc = find_last_free(cxt, is_logical, start, limit, &last); - if (rc == 0 && last - start + 1 < fdisk_partition_get_size(pa)) { DBG(LABEL, ul_debug("DOS: area <%ju,%ju> too small [wanted=%ju aval=%ju]", (uintmax_t) start, (uintmax_t) last, fdisk_partition_get_size(pa), last - start)); - if (fdisk_partition_has_start(pa)) + if (fdisk_partition_has_start(pa) + && fdisk_partition_get_start(pa) <= last) rc = -ENOSPC; else { start = last + 1;