]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Pull request #4242: hash: exception handling for random device
authorRaza Shafiq (rshafiq) <rshafiq@cisco.com>
Mon, 18 Mar 2024 15:40:49 +0000 (15:40 +0000)
committerSteven Baigal (sbaigal) <sbaigal@cisco.com>
Mon, 18 Mar 2024 15:40:49 +0000 (15:40 +0000)
Merge in SNORT/snort3 from ~RSHAFIQ/snort3:rand_dev_exception to master

Squashed commit of the following:

commit 3cf896071f6c739cd5d36038c99eae8f928e2e66
Author: rshafiq <rshafiq@cisco.com>
Date:   Wed Mar 13 13:40:21 2024 -0400

    hash: exception handling for random device

src/flow/test/flow_cache_test.cc
src/hash/hash_key_operations.cc
src/hash/test/ghash_test.cc
src/hash/test/xhash_test.cc
src/hash/test/zhash_test.cc
src/main/test/distill_verdict_test.cc

index 2dd950da46aaf6851ff840ed18a51773952842d0..ebdc93020210c5e588a96a9be5923b259f1b1c5e 100644 (file)
@@ -97,6 +97,8 @@ time_t packet_time() { return 0; }
 
 void trace_vprintf(const char*, TraceLevel, const char*, const Packet*, const char*, va_list) {}
 
+unsigned get_instance_id() { return 0; }
+
 namespace ip
 {
 uint32_t IpApi::id() const { return 0; }
@@ -108,6 +110,8 @@ int ExpectCache::add_flow(const Packet*, PktType, IpProtocol, const SfIp*, uint1
 {
     return 1;
 }
+unsigned int get_random_seed()
+{ return 3193; }
 
 TEST_GROUP(flow_prune) { };
 
index 72bb2d4e2367ff99cef9997b3d286fb47428b3be..79e0a2645038f5a36dd6dd63e103b2d14bd33f31 100644 (file)
@@ -36,8 +36,6 @@ using namespace snort;
 
 HashKeyOperations::HashKeyOperations(int rows)
 {
-    static std::mt19937 generator(static_cast<unsigned int>(std::random_device{}()));
-
     if (SnortConfig::static_hash()) 
     {
         seed = 3193;
@@ -50,6 +48,8 @@ HashKeyOperations::HashKeyOperations(int rows)
             rows = 1;
 
         std::uniform_int_distribution<> distr(1, rows);
+        static auto gen_seed = get_random_seed();
+        static thread_local std::mt19937 generator(gen_seed + get_instance_id());
 
         seed = nearest_prime(distr(generator) + 3191);
         scale = nearest_prime(distr(generator) + 709);
index c9dbae5841b661424239130ba3d044c5282b7037..cf8b35201e2e211d2714bdde00adeb03db54318f 100644 (file)
@@ -38,6 +38,8 @@ using namespace snort;
 static SnortConfig my_config;
 THREAD_LOCAL SnortConfig* snort_conf = &my_config;
 
+unsigned snort::get_instance_id() { return 0; }
+
 DataBus::DataBus() = default;
 DataBus::~DataBus() = default;
 
@@ -50,6 +52,9 @@ SnortConfig::~SnortConfig() = default;
 const SnortConfig* SnortConfig::get_conf()
 { return snort_conf; }
 
+unsigned int get_random_seed()
+{ return 3193; }
+
 // user free function
 static void myfree(void* p)
 {
index 349fd6fb16ba95041b582c05af73ac35cb5af6dc..3b6112f5398f3f05263d4d0abc1f347308d0e9f9 100644 (file)
@@ -38,6 +38,8 @@ using namespace snort;
 static SnortConfig my_config;
 THREAD_LOCAL SnortConfig* snort_conf = &my_config;
 
+unsigned snort::get_instance_id() { return 0; }
+
 DataBus::DataBus() = default;
 DataBus::~DataBus() = default;
 
@@ -50,6 +52,8 @@ SnortConfig::~SnortConfig() = default;
 const SnortConfig* SnortConfig::get_conf()
 { return snort_conf; }
 
+unsigned int get_random_seed()
+{ return 3193; }
 struct xhash_test_key
 {
     int key;
index d3452d2f5c3bfaee2b00749b60e6ba7dd2caeba3..f98a8a806a6909a71ab05530281c86c02068fd21 100644 (file)
@@ -57,6 +57,8 @@ bool FlowHashKeyOps::key_compare(const void* k1, const void* k2, size_t len)
     else
         return false;
 }
+
+unsigned get_instance_id() { return 0; }
 }
 
 // Stubs whose sole purpose is to make the test code link
@@ -75,6 +77,9 @@ SnortConfig::~SnortConfig() = default;
 const SnortConfig* SnortConfig::get_conf()
 { return snort_conf; }
 
+unsigned int get_random_seed()
+{ return 3193; }
+
 const unsigned ZHASH_ROWS = 50;
 const unsigned ZHASH_KEY_SIZE = 100;
 const unsigned MAX_ZHASH_NODES = 100;
index e4c88fcfb314a8d075afbf28b57f0212a80fd3e3..0159654d8bd4a3ea0f031d330598007f6b748420 100644 (file)
@@ -51,6 +51,8 @@ void Flow::trust() { }
 
 SFDAQInstance* SFDAQ::get_local_instance() { return nullptr; }
 
+unsigned int get_random_seed()
+{ return 3193; }
 unsigned DataBus::get_id(const PubKey&)
 { return 0; }
 }