[PATCH] e2fsck: fix floating point precision error

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Reiser Filesystem Development]     [Ceph FS]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite National Park]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]     [Linux Media]

  Powered by Linux