From: Masud Hasan (mashasan) Date: Mon, 5 Oct 2020 21:15:01 +0000 (+0000) Subject: Merge pull request #2524 in SNORT/snort3 from ~SMINUT/snort3:fp_proc to master X-Git-Tag: 3.0.3-2~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7ecf5c0976f8173ca0f2f4ad8b78c736bd2bad2f;p=thirdparty%2Fsnort3.git Merge pull request #2524 in SNORT/snort3 from ~SMINUT/snort3:fp_proc to master Squashed commit of the following: commit dd6cf66f0414833b39cf2691b8c11c71f9b4bc8d Author: Silviu Minut Date: Thu Oct 1 17:03:09 2020 -0400 rna: set the thread local fingerprint processors during reload_config --- diff --git a/src/network_inspectors/rna/rna_module.cc b/src/network_inspectors/rna/rna_module.cc index 9e26d9d15..fef5a6eac 100644 --- a/src/network_inspectors/rna/rna_module.cc +++ b/src/network_inspectors/rna/rna_module.cc @@ -33,6 +33,7 @@ #include "log/messages.h" #include "lua/lua.h" #include "main/snort_config.h" +#include "main/snort.h" #include "managers/module_manager.h" #include "utils/util.h" @@ -75,6 +76,13 @@ static inline string format_dump_mac(const uint8_t mac[MAC_SIZE]) return ss.str(); } +bool FpProcReloadTuner::tinit() +{ + set_tcp_fp_processor(mod_conf->tcp_processor); + set_ua_fp_processor(mod_conf->ua_processor); + return false; // no work to do after this +} + static const Command rna_cmds[] = { { "dump_macs", dump_mac_cache, nullptr, @@ -302,6 +310,13 @@ bool RnaModule::end(const char* fqn, int index, SnortConfig* sc) if ( mod_conf->ua_processor ) mod_conf->ua_processor->make_mpse(sc); + + if ( (mod_conf->tcp_processor || mod_conf->ua_processor) && Snort::is_reloading() ) + { + fprt.mod_conf = mod_conf; + sc->register_reload_resource_tuner(fprt); + } + } if ( index > 0 and mod_conf->tcp_processor and !strcmp(fqn, "rna.tcp_fingerprints") ) diff --git a/src/network_inspectors/rna/rna_module.h b/src/network_inspectors/rna/rna_module.h index c22f420f6..fe4747da0 100644 --- a/src/network_inspectors/rna/rna_module.h +++ b/src/network_inspectors/rna/rna_module.h @@ -22,6 +22,7 @@ #define RNA_MODULE_H #include "framework/module.h" +#include "main/snort_config.h" #include "main/snort_debug.h" #include "profiler/profiler.h" @@ -49,6 +50,24 @@ extern THREAD_LOCAL RnaStats rna_stats; extern THREAD_LOCAL snort::ProfileStats rna_perf_stats; extern THREAD_LOCAL const snort::Trace* rna_trace; + +// A tuner for initializing fingerprint processors during reload +class FpProcReloadTuner : public snort::ReloadResourceTuner +{ +public: + FpProcReloadTuner() = default; + + bool tinit() override; + + bool tune_packet_context() override + { return true; } + + bool tune_idle_context() override + { return true; } + + RnaModuleConfig* mod_conf = nullptr; +}; + class RnaModule : public snort::Module { public: @@ -78,6 +97,8 @@ private: RawFingerprint fingerprint; + FpProcReloadTuner fprt; + bool is_valid_fqn(const char* fqn) const; }; diff --git a/src/network_inspectors/rna/test/rna_module_test.cc b/src/network_inspectors/rna/test/rna_module_test.cc index 9b3924175..d088c402e 100644 --- a/src/network_inspectors/rna/test/rna_module_test.cc +++ b/src/network_inspectors/rna/test/rna_module_test.cc @@ -36,6 +36,14 @@ #include #include +void set_tcp_fp_processor(TcpFpProcessor*) { } +void set_ua_fp_processor(UaFpProcessor*) { } + +namespace snort +{ + bool Snort::is_reloading() { return false; } +} + TEST_GROUP(rna_module_test) { };