From 1b5a72829324a0d2fa327a270caea8fd02ae8779 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Tue, 5 Aug 2003 00:08:30 +0000 Subject: [PATCH] 1499. [bug] isc_random need to be seeded better if arc4random() is not used. --- CHANGES | 3 +++ lib/isc/random.c | 12 ++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index de32cc2503..55687d4223 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +1499. [bug] isc_random need to be seeded better if arc4random() + is not used. + 1498. [port] bsdos: 5.x support. 1497. [placeholder] diff --git a/lib/isc/random.c b/lib/isc/random.c index 9091cbf1c3..aa495e8348 100644 --- a/lib/isc/random.c +++ b/lib/isc/random.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: random.c,v 1.17 2002/12/05 04:36:26 marka Exp $ */ +/* $Id: random.c,v 1.18 2003/08/05 00:08:30 marka Exp $ */ #include @@ -34,7 +34,15 @@ static void initialize_rand(void) { #ifndef HAVE_ARC4RANDOM - srand(time(NULL)); + unsigned int pid = getpid(); + + /* + * The low bits of pid generally change faster. + * Xor them with the high bits of time which change slowly. + */ + pid = ((pid << 16) & 0xffff0000) | ((pid >> 16) & 0xffff); + + srand(time(NULL) ^ pid); #endif }