svn commit: r241373 - head/lib/libc/stdlib

Eitan Adler eadler at FreeBSD.org
Tue Oct 9 14:25:15 UTC 2012


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;
 	}
 


More information about the svn-src-head mailing list