diff --git a/sfdisk-fix-calculation-due-to-type-mismatch.patch b/sfdisk-fix-calculation-due-to-type-mismatch.patch new file mode 100644 index 0000000..2bc4804 --- /dev/null +++ b/sfdisk-fix-calculation-due-to-type-mismatch.patch @@ -0,0 +1,59 @@ +From 9c45d49fe01c1c8f971d7d2d664e40dd82d00cf5 Mon Sep 17 00:00:00 2001 +From: Petr Uzel +Date: Fri, 6 Apr 2012 16:53:13 +0200 +Subject: [PATCH] sfdisk: fix calculation due to type mismatch (ix86) + +Instructing sfdisk to create one partition spanning +across entire disk (",,") on 32bit system, if the disk +is sufficiently large (~2TB) leads to wrong calculation +in compute_start_sect() due to type mismatch. + +Can be reproduced as: + +-------------------------- +linux-3ln5:~ # modprobe scsi_debug virtual_gb=2000 +linux-3ln5:~ # sfdisk /dev/sda <<< ',,' +Checking that no-one is using this disk right now ... +OK + +Disk /dev/sda: 261083 cylinders, 255 heads, 63 sectors/track + +sfdisk: ERROR: sector 0 does not have an msdos signature +sfdisk: /dev/sda: unrecognized partition table type + +Old situation: +sfdisk: No partitions found + +no room for partition descriptor +sfdisk: bad input +-------------------------- + +Addresses: https://bugzilla.novell.com/show_bug.cgi?id=754789 +Reported-by: Dan Mares +Signed-off-by: Petr Uzel +--- + fdisk/sfdisk.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +Index: util-linux-2.21.1/fdisk/sfdisk.c +=================================================================== +--- util-linux-2.21.1.orig/fdisk/sfdisk.c ++++ util-linux-2.21.1/fdisk/sfdisk.c +@@ -1990,7 +1990,7 @@ static int + compute_start_sect(struct part_desc *p, struct part_desc *ep) { + unsigned long long base; + int inc = (DOS && B.sectors) ? B.sectors : 1; +- int delta; ++ long long delta; + + if (ep && p->start + p->size >= ep->start + 1) + delta = p->start - ep->start - inc; +@@ -2005,7 +2005,7 @@ compute_start_sect(struct part_desc *p, + p->size += delta; + if (is_extended(p->p.sys_type) && boxes == ONESECTOR) + p->size = inc; +- else if ((ssize_t) old_size <= (ssize_t) - delta) { ++ else if ((long long) old_size <= -delta) { + my_warn(_("no room for partition descriptor\n")); + return 0; + } diff --git a/util-linux.changes b/util-linux.changes index bc3255b..3228dfb 100644 --- a/util-linux.changes +++ b/util-linux.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Thu Apr 12 09:09:05 UTC 2012 - puzel@suse.com + +- fix miscalculation in sfdisk on ix86 (bnc#754789) + - add sfdisk-fix-calculation-due-to-type-mismatch.patch + ------------------------------------------------------------------- Sat Mar 31 11:09:38 UTC 2012 - puzel@suse.com diff --git a/util-linux.spec b/util-linux.spec index 5dd4a59..9848dd6 100644 --- a/util-linux.spec +++ b/util-linux.spec @@ -87,6 +87,7 @@ Source51: blkid.conf Patch1: util-linux-2.12r-fdisk_remove_bogus_warnings.patch Patch2: util-linux-2.20-libmount-deps.patch Patch3: fdisk-tinfo.patch +Patch4: sfdisk-fix-calculation-due-to-type-mismatch.patch ## ## adjtimex @@ -193,6 +194,7 @@ Files to develop applications using the libmount library. %patch1 -p1 %patch2 -p1 %patch3 -p1 +%patch4 -p1 # cd adjtimex-* @@ -246,6 +248,7 @@ make %{?_smp_mflags} setctsid CFLAGS="%{optflags}" CC="%{__cc}" autoreconf -fi export SUID_CFLAGS="-fpie" export SUID_LDFLAGS="-pie" +export CFLAGS="-ggdb3 -O0" %configure \ --with-audit \ --with-selinux \