All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] Fix assert error in libfdisk's free space handling
@ 2016-08-27 17:28 Tobias Stoeckmann
  2016-08-29 11:35 ` Karel Zak
  0 siblings, 1 reply; 2+ messages in thread
From: Tobias Stoeckmann @ 2016-08-27 17:28 UTC (permalink / raw)
  To: util-linux

An off-by-one issue exists in fdisk_get_freespaces. It can trigger an
assert, as seen here:

$ dd if=/dev/zero of=cfdisk.iso bs=1M count=1
$ losetup -f cfdisk.iso
$ echo w | fdisk /dev/loop0
$ echo '1,2' | sfdisk /dev/loop0 --append
$ echo '3,' | sfdisk /dev/loop0 --append
$ sfdisk --list-free /dev/loop0
Aborted
$ _

Problem here is an invalid "grain" processing. A grain is considered
expected free space between partitions which can be required for proper
alignment. Normally, it's 1 MB but in this case our iso is merely 1 MB
so the grain is reduced to 1 byte.

The if-condition in question checks for "last + grain <= pa->start" and
therefore even triggers if there is no space between them (due to equal
check). Eventually, the start block address is higher than the end block
address which triggers the assert().

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
---
 libfdisk/src/table.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libfdisk/src/table.c b/libfdisk/src/table.c
index 755c6c2..bf30d1b 100644
--- a/libfdisk/src/table.c
+++ b/libfdisk/src/table.c
@@ -616,7 +616,7 @@ int fdisk_get_freespaces(struct fdisk_context *cxt, struct fdisk_table **tb)
 		/* We ignore small free spaces (smaller than grain) to keep partitions
 		 * aligned, the exception is space before the first partition where
 		 * we assume that cxt->first_lba is aligned. */
-		if (last + grain <= pa->start
+		if (last + grain < pa->start
 		    || (last < pa->start && last == cxt->first_lba)) {
 			rc = table_add_freespace(cxt, *tb,
 				last + (last > cxt->first_lba ? 1 : 0),
-- 
2.9.3


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH 1/2] Fix assert error in libfdisk's free space handling
  2016-08-27 17:28 [PATCH 1/2] Fix assert error in libfdisk's free space handling Tobias Stoeckmann
@ 2016-08-29 11:35 ` Karel Zak
  0 siblings, 0 replies; 2+ messages in thread
From: Karel Zak @ 2016-08-29 11:35 UTC (permalink / raw)
  To: Tobias Stoeckmann; +Cc: util-linux

On Sat, Aug 27, 2016 at 07:28:16PM +0200, Tobias Stoeckmann wrote:
>  libfdisk/src/table.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

Applied, thanks.

-- 
 Karel Zak  <kzak@redhat.com>
 http://karelzak.blogspot.com

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2016-08-29 11:46 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-08-27 17:28 [PATCH 1/2] Fix assert error in libfdisk's free space handling Tobias Stoeckmann
2016-08-29 11:35 ` Karel Zak

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.