diff --git a/src/Makefile.am b/src/Makefile.am index 4350d8baf5..6bcb477ba4 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -117,6 +117,7 @@ util-host-os-info.c util-host-os-info.h \ util-rule-vars.c util-rule-vars.h \ util-fix_checksum.c util-fix_checksum.h \ util-daemon.c util-daemon.h \ +util-random.c util-random.h \ tm-modules.c tm-modules.h \ tm-queues.c tm-queues.h \ tm-queuehandlers.c tm-queuehandlers.h \ diff --git a/src/defrag.c b/src/defrag.c index 428dc64580..66c3d39880 100644 --- a/src/defrag.c +++ b/src/defrag.c @@ -30,6 +30,7 @@ #include "util-print.h" #include "util-debug.h" #include "util-fix_checksum.h" +#include "util-random.h" #ifdef UNITTESTS #include "util-unittest.h" @@ -1266,9 +1267,9 @@ void DefragInit(void) { /* Initialize random value for hashing and hash table size. */ - unsigned int seed = TimeRandPreseed(); + unsigned int seed = RandomTimePreseed(); /* set defaults */ - defrag_hash_rand = (int)( DEFAULT_DEFRAG_HASH_SIZE * (rand_r(&seed) / RAND_MAX + 1.0)) ; /* XXX seed rand */ + defrag_hash_rand = (int)( DEFAULT_DEFRAG_HASH_SIZE * (rand_r(&seed) / RAND_MAX + 1.0)); defrag_hash_size = DEFAULT_DEFRAG_HASH_SIZE; diff --git a/src/flow.c b/src/flow.c index c4cb34d61e..9663aa5a0f 100644 --- a/src/flow.c +++ b/src/flow.c @@ -14,6 +14,7 @@ #include "tm-modules.h" #include "tm-threads.h" +#include "util-random.h" #include "util-time.h" #include "flow.h" @@ -436,9 +437,9 @@ void FlowInitConfig (char quiet) } SCMutexInit(&flow_memuse_mutex, NULL); - unsigned int seed = TimeRandPreseed(); + unsigned int seed = RandomTimePreseed(); /* set defaults */ - flow_config.hash_rand = (int)( FLOW_DEFAULT_HASHSIZE * (rand_r(&seed) / RAND_MAX + 1.0)) ; /* XXX seed rand */ + flow_config.hash_rand = (int)( FLOW_DEFAULT_HASHSIZE * (rand_r(&seed) / RAND_MAX + 1.0)); flow_config.hash_size = FLOW_DEFAULT_HASHSIZE; flow_config.memcap = FLOW_DEFAULT_MEMCAP; diff --git a/src/util-random.c b/src/util-random.c new file mode 100644 index 0000000000..210071b43b --- /dev/null +++ b/src/util-random.c @@ -0,0 +1,26 @@ +/** \file + * \author Pablo Rincon + */ + +#include "suricata-common.h" +#include "detect.h" +#include "threads.h" +#include "util-debug.h" + +/** + * \brief create a seed number to pass to rand() , rand_r(), and similars + * \retval seed for rand() + */ +unsigned int RandomTimePreseed(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-random.h b/src/util-random.h new file mode 100644 index 0000000000..0714fa0974 --- /dev/null +++ b/src/util-random.h @@ -0,0 +1,7 @@ +#ifndef __UTIL_RANDOM_H__ +#define __UTIL_RANDOM_H__ + +unsigned int RandomTimePreseed(void); + +#endif /* __UTIL_RANDOM_H__ */ + diff --git a/src/util-time.c b/src/util-time.c index 5646baa6af..f789cc895a 100644 --- a/src/util-time.c +++ b/src/util-time.c @@ -79,19 +79,3 @@ 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 82f145907e..5597e700e2 100644 --- a/src/util-time.h +++ b/src/util-time.h @@ -10,7 +10,5 @@ void TimeSetIncrementTime(uint32_t); void TimeModeSetLive(void); void TimeModeSetOffline (void); -unsigned int TimeRandPreseed(void); - #endif /* __UTIL_TIME_H__ */