From: Juweria Ali Imran (jaliimra) Date: Tue, 25 Jun 2024 14:52:57 +0000 (+0000) Subject: Pull request #4360: stream_tcp: move prev_norm object from TcpNormalizer to TcpNormal... X-Git-Tag: 3.3.1.0~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=344e62c7f504e835dfd5eb3505d3a5065be0232a;p=thirdparty%2Fsnort3.git Pull request #4360: stream_tcp: move prev_norm object from TcpNormalizer to TcpNormalizerState Merge in SNORT/snort3 from ~JALIIMRA/snort3:prev_norm_tsan to master Squashed commit of the following: commit ce50d84da43185c12a65649e3e559d54b3c95b07 Author: Juweria Ali Imran Date: Fri Jun 21 12:46:55 2024 -0400 stream_tcp: move prev_norm object from TcpNormalizer to TcpNormalizerState --- diff --git a/src/stream/tcp/tcp_normalizer.h b/src/stream/tcp/tcp_normalizer.h index 1e800ad3c..a50397b0a 100644 --- a/src/stream/tcp/tcp_normalizer.h +++ b/src/stream/tcp/tcp_normalizer.h @@ -33,12 +33,14 @@ class TcpStreamSession; class TcpStreamTracker; class TcpSegmentDescriptor; +class TcpNormalizer; struct TcpNormalizerState { TcpStreamSession* session = nullptr; TcpStreamTracker* tracker = nullptr; TcpStreamTracker* peer_tracker = nullptr; + TcpNormalizer* prev_norm = nullptr; StreamPolicy os_policy = StreamPolicy::OS_DEFAULT; @@ -67,7 +69,6 @@ public: virtual ~TcpNormalizer() = default; virtual void init(State&) { } - virtual void init(TcpNormalizer*) { } virtual NormStatus apply_normalizations( State&, TcpSegmentDescriptor&, uint32_t seq, bool stream_is_inorder); @@ -114,7 +115,6 @@ protected: virtual int handle_paws_no_timestamps(State&, TcpSegmentDescriptor&); std::string my_name; - TcpNormalizer* prev_norm = nullptr; }; #endif diff --git a/src/stream/tcp/tcp_normalizers.cc b/src/stream/tcp/tcp_normalizers.cc index 599a3cb11..7b0f306a4 100644 --- a/src/stream/tcp/tcp_normalizers.cc +++ b/src/stream/tcp/tcp_normalizers.cc @@ -214,9 +214,6 @@ public: TcpNormalizerMissed3whs() { my_name = "Missed3whs"; } - void init(TcpNormalizer* prev) override - { prev_norm = prev; } - TcpNormalizer::NormStatus apply_normalizations( TcpNormalizerState&, TcpSegmentDescriptor&, uint32_t seq, bool stream_is_inorder) override; bool validate_rst(TcpNormalizerState&, TcpSegmentDescriptor&) override; @@ -498,9 +495,9 @@ bool TcpNormalizerMissed3whs::validate_rst( TcpNormalizerState& tns, TcpSegmentDescriptor& tsd) { if ( tns.session->flow->two_way_traffic() ) - return prev_norm->validate_rst(tns, tsd); + return tns.prev_norm->validate_rst(tns, tsd); - if ( !prev_norm->get_name().compare("OS_Hpux11") ) + if ( !tns.prev_norm->get_name().compare("OS_Hpux11") ) return validate_rst_seq_geq(tns, tsd); return true; @@ -515,14 +512,15 @@ int TcpNormalizerMissed3whs::handle_paws( int TcpNormalizerMissed3whs::handle_repeated_syn( TcpNormalizerState& tns, TcpSegmentDescriptor& tsd) { - return prev_norm->handle_repeated_syn(tns, tsd); + return tns.prev_norm->handle_repeated_syn(tns, tsd); } void TcpNormalizerPolicy::init(StreamPolicy os, TcpStreamSession* ssn, TcpStreamTracker* trk, TcpStreamTracker* peer) { - TcpNormalizer* prev_norm = nullptr; - if ( os == StreamPolicy::MISSED_3WHS and os != tns.os_policy ) - prev_norm = TcpNormalizerFactory::get_instance(tns.os_policy); + if ( os == StreamPolicy::MISSED_3WHS and os == tns.os_policy) + tns.prev_norm = TcpNormalizerFactory::get_instance(StreamPolicy::OS_DEFAULT); + else + tns.prev_norm = TcpNormalizerFactory::get_instance(tns.os_policy); tns.os_policy = os; tns.session = ssn; @@ -543,11 +541,7 @@ void TcpNormalizerPolicy::init(StreamPolicy os, TcpStreamSession* ssn, TcpStream tns.opt_block = Normalize_GetMode(NORM_TCP_OPT); norm = TcpNormalizerFactory::get_instance(os); - - if ( prev_norm ) - norm->init(prev_norm); - else - norm->init(tns); + norm->init(tns); } TcpNormalizer* TcpNormalizerFactory::normalizers[StreamPolicy::OS_END_OF_LIST];