From 9fcf415711585993525e35ff1e6b225f0deb5f20 Mon Sep 17 00:00:00 2001 From: Pablo Rincon Date: Thu, 31 Dec 2009 02:22:06 +0100 Subject: [PATCH] Adding preseending to rands --- src/defrag.c | 6 +++++- src/flow.c | 4 +++- src/util-time.c | 16 ++++++++++++++++ src/util-time.h | 2 ++ 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/defrag.c b/src/defrag.c index 242764c..7da47ba 100644 --- a/src/defrag.c +++ b/src/defrag.c @@ -26,6 +26,7 @@ #include "decode-ipv6.h" #include "util-hashlist.h" #include "util-pool.h" +#include "util-time.h" #include "util-print.h" #include "util-debug.h" #include "util-fix_checksum.h" @@ -1235,7 +1236,10 @@ void DefragInit(void) { /* Initialize random value for hashing and hash table size. */ - defrag_hash_rand = rand(); + unsigned int seed = TimeRandPreseed(); + /* set defaults */ + defrag_hash_rand = (int)( DEFAULT_DEFRAG_HASH_SIZE * (rand_r(&seed) / RAND_MAX + 1.0)) ; /* XXX seed rand */ + defrag_hash_size = DEFAULT_DEFRAG_HASH_SIZE; /* Allocate the DefragContext. */ diff --git a/src/flow.c b/src/flow.c index ca6eb59..c4cb34d 100644 --- a/src/flow.c +++ b/src/flow.c @@ -436,8 +436,10 @@ void FlowInitConfig (char quiet) } SCMutexInit(&flow_memuse_mutex, NULL); + unsigned int seed = TimeRandPreseed(); /* set defaults */ - flow_config.hash_rand = rand(); /* XXX seed rand */ + flow_config.hash_rand = (int)( FLOW_DEFAULT_HASHSIZE * (rand_r(&seed) / RAND_MAX + 1.0)) ; /* XXX seed rand */ + flow_config.hash_size = FLOW_DEFAULT_HASHSIZE; flow_config.memcap = FLOW_DEFAULT_MEMCAP; flow_config.prealloc = FLOW_DEFAULT_PREALLOC; diff --git a/src/util-time.c b/src/util-time.c index f789cc8..6e9764d 100644 --- a/src/util-time.c +++ b/src/util-time.c @@ -79,3 +79,19 @@ void TimeSetIncrementTime(uint32_t tv_sec) { TimeSet(&tv); } +/** + * \brief create a seed number to pass to rand() , rand_r(), and similars + */ +unsigned int TimeRandPreseed(void) { + /* preseed rand() */ + time_t now = time ( 0 ); + unsigned char *p = (unsigned char *)&now; + unsigned seed = 0; + size_t ind; + + for ( ind = 0; ind < sizeof now; ind++ ) + seed = seed * ( UCHAR_MAX + 2U ) + p[ind]; + + return seed; +} + diff --git a/src/util-time.h b/src/util-time.h index 5597e70..82f1459 100644 --- a/src/util-time.h +++ b/src/util-time.h @@ -10,5 +10,7 @@ void TimeSetIncrementTime(uint32_t); void TimeModeSetLive(void); void TimeModeSetOffline (void); +unsigned int TimeRandPreseed(void); + #endif /* __UTIL_TIME_H__ */ -- 1.6.5