Author: eadler
Date: Tue Oct  9 14:25:14 2012
New Revision: 241373
URL: http://svn.freebsd.org/changeset/base/241373

Log:
  Remove undefined behavior from sranddev() and
  srandomdev(). This doesn't actually work
  with any modern C compiler:
  
  In particular, both clang and modern gcc
  verisons silently elide any xor operation
  with 'junk'.
  
  Approved by:  secteam
  MFC after:    3 days

Modified:
  head/lib/libc/stdlib/rand.c
  head/lib/libc/stdlib/random.c

Modified: head/lib/libc/stdlib/rand.c
==============================================================================
--- head/lib/libc/stdlib/rand.c Tue Oct  9 13:21:08 2012        (r241372)
+++ head/lib/libc/stdlib/rand.c Tue Oct  9 14:25:14 2012        (r241373)
@@ -130,10 +130,9 @@ sranddev()
 
        if (!done) {
                struct timeval tv;
-               unsigned long junk;
 
                gettimeofday(&tv, NULL);
-               srand((getpid() << 16) ^ tv.tv_sec ^ tv.tv_usec ^ junk);
+               srand((getpid() << 16) ^ tv.tv_sec ^ tv.tv_usec);
        }
 }
 

Modified: head/lib/libc/stdlib/random.c
==============================================================================
--- head/lib/libc/stdlib/random.c       Tue Oct  9 13:21:08 2012        
(r241372)
+++ head/lib/libc/stdlib/random.c       Tue Oct  9 14:25:14 2012        
(r241373)
@@ -312,10 +312,9 @@ srandomdev(void)
 
        if (!done) {
                struct timeval tv;
-               volatile unsigned long junk;
 
                gettimeofday(&tv, NULL);
-               srandom((getpid() << 16) ^ tv.tv_sec ^ tv.tv_usec ^ junk);
+               srandom((getpid() << 16) ^ tv.tv_sec ^ tv.tv_usec);
                return;
        }
 
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to