From: Raza Shafiq (rshafiq) Date: Mon, 18 Mar 2024 15:40:49 +0000 (+0000) Subject: Pull request #4242: hash: exception handling for random device X-Git-Tag: 3.1.83.0~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4240c9748d2360ea79b691934ec7cb6c52def184;p=thirdparty%2Fsnort3.git Pull request #4242: hash: exception handling for random device Merge in SNORT/snort3 from ~RSHAFIQ/snort3:rand_dev_exception to master Squashed commit of the following: commit 3cf896071f6c739cd5d36038c99eae8f928e2e66 Author: rshafiq Date: Wed Mar 13 13:40:21 2024 -0400 hash: exception handling for random device --- diff --git a/src/flow/test/flow_cache_test.cc b/src/flow/test/flow_cache_test.cc index 2dd950da4..ebdc93020 100644 --- a/src/flow/test/flow_cache_test.cc +++ b/src/flow/test/flow_cache_test.cc @@ -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) { }; diff --git a/src/hash/hash_key_operations.cc b/src/hash/hash_key_operations.cc index 72bb2d4e2..79e0a2645 100644 --- a/src/hash/hash_key_operations.cc +++ b/src/hash/hash_key_operations.cc @@ -36,8 +36,6 @@ using namespace snort; HashKeyOperations::HashKeyOperations(int rows) { - static std::mt19937 generator(static_cast(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); diff --git a/src/hash/test/ghash_test.cc b/src/hash/test/ghash_test.cc index c9dbae584..cf8b35201 100644 --- a/src/hash/test/ghash_test.cc +++ b/src/hash/test/ghash_test.cc @@ -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) { diff --git a/src/hash/test/xhash_test.cc b/src/hash/test/xhash_test.cc index 349fd6fb1..3b6112f53 100644 --- a/src/hash/test/xhash_test.cc +++ b/src/hash/test/xhash_test.cc @@ -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; diff --git a/src/hash/test/zhash_test.cc b/src/hash/test/zhash_test.cc index d3452d2f5..f98a8a806 100644 --- a/src/hash/test/zhash_test.cc +++ b/src/hash/test/zhash_test.cc @@ -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; diff --git a/src/main/test/distill_verdict_test.cc b/src/main/test/distill_verdict_test.cc index e4c88fcfb..0159654d8 100644 --- a/src/main/test/distill_verdict_test.cc +++ b/src/main/test/distill_verdict_test.cc @@ -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; } }