I'm not sure if this is the cleanest fix for the issue, but it seems to 
work for me.

In random.c the taviso() routine uses "rand() % rand()" which
can cause a floating point exception if rand() returns 0.
Add some tests to make sure that doesn't happen.

Signed-off-by: Vince Weaver <[email protected]>

diff --git a/random.c b/random.c
index 7def9ff..a71fcea 100644
--- a/random.c
+++ b/random.c
@@ -42,6 +42,7 @@ static unsigned long randbits(int limit)
 static unsigned long taviso(void)
 {
        unsigned long r = 0;
+       unsigned long temp;
 
        switch (rand() % 4) {
        case 0: r = rand() & rand();
@@ -51,10 +52,14 @@ static unsigned long taviso(void)
 #endif
                break;
 
-       case 1: r = rand() % rand();
+       case 1: temp = rand();
+               r = rand();
+               if (!temp) r %= temp;
 #if __WORDSIZE == 64
                r <<= 32;
-               r |= rand() % rand();
+
+               temp = rand();
+               if (!temp) r |= rand() % temp;
 #endif
                break;
 
--
To unsubscribe from this list: send the line "unsubscribe trinity" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to