Package: util-linux Version: 2.20.1-4 Severity: important Tags: upstream patch fixed-upstream
Hi, Please consider the following patch for sid and squeeze. At my workplace we have had something like this patch applied for the past couple of years, until we upgraded to squeeze and experienced the bug again. :) If you have any questions, please don't hesitate to ask. The patch is commit 9c45d49fe01c upstream. Thanks, Jonathan -- >8 -- From: Petr Uzel <petr.u...@suse.cz> Date: Fri, 6 Apr 2012 16:53:13 +0200 Subject: 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 <dan.ma...@norcrossgroup.com> Signed-off-by: Petr Uzel <petr.u...@suse.cz> Signed-off-by: Jonathan Nieder <jrnie...@gmail.com> --- fdisk/sfdisk.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fdisk/sfdisk.c b/fdisk/sfdisk.c index 2729af18..eb2efe85 100644 --- a/fdisk/sfdisk.c +++ b/fdisk/sfdisk.c @@ -1995,7 +1995,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; @@ -2010,7 +2010,7 @@ compute_start_sect(struct part_desc *p, struct part_desc *ep) { 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; } -- 1.7.10 -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org