[<prev] [next>] [day] [month] [year] [list]
Message-ID: <550740039.484761277873680181.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com>
Date: Wed, 30 Jun 2010 00:54:40 -0400 (EDT)
From: Lachlan McIlroy <lmcilroy@...hat.com>
To: ext4 development <linux-ext4@...r.kernel.org>
Subject: [PATCH] e2fsck: fix floating point precision error
Fix floating point precision error in e2fsck.
Commit 641b66bc7ee0a880b0eb0125dff5f8ed8dd5a160 fixed a floating
point precision error which can result in a search algorithm looping
forever. It can also result in an array index being out of bounds
and causing a segfault. Here are two more cases that need to be
fixed. I've just used the same fix from the that commit.
diff -up e2fsprogs-1.39/e2fsck/ea_refcount.c.orig e2fsprogs-1.39/e2fsck/ea_refcount.c
--- e2fsprogs-1.39/e2fsck/ea_refcount.c.orig 2010-06-30 11:14:51.516239079 +1000
+++ e2fsprogs-1.39/e2fsck/ea_refcount.c 2010-06-30 11:22:22.277362222 +1000
@@ -193,9 +193,14 @@ retry:
range = 0;
else if (blk > highval)
range = 1;
- else
+ else {
range = ((float) (blk - lowval)) /
(highval - lowval);
+ if (range > 0.9)
+ range = 0.9;
+ if (range < 0.1)
+ range = 0.1;
+ }
mid = low + ((int) (range * (high-low)));
}
#endif
diff -up e2fsprogs-1.39/resize/extent.c.orig e2fsprogs-1.39/resize/extent.c
--- e2fsprogs-1.39/resize/extent.c.orig 2010-06-30 11:25:58.969188333 +1000
+++ e2fsprogs-1.39/resize/extent.c 2010-06-30 11:26:40.449327216 +1000
@@ -167,9 +167,14 @@ __u32 ext2fs_extent_translate(ext2_exten
range = 0;
else if (old_loc > highval)
range = 1;
- else
+ else {
range = ((float) (old_loc - lowval)) /
(highval - lowval);
+ if (range > 0.9)
+ range = 0.9;
+ if (range < 0.1)
+ range = 0.1;
+ }
mid = low + ((int) (range * (high-low)));
}
#endif
Lachlan
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists