]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Pull request #4360: stream_tcp: move prev_norm object from TcpNormalizer to TcpNormal...
authorJuweria Ali Imran (jaliimra) <jaliimra@cisco.com>
Tue, 25 Jun 2024 14:52:57 +0000 (14:52 +0000)
committerSteven Baigal (sbaigal) <sbaigal@cisco.com>
Tue, 25 Jun 2024 14:52:57 +0000 (14:52 +0000)
Merge in SNORT/snort3 from ~JALIIMRA/snort3:prev_norm_tsan to master

Squashed commit of the following:

commit ce50d84da43185c12a65649e3e559d54b3c95b07
Author: Juweria Ali Imran <jaliimra@cisco.com>
Date:   Fri Jun 21 12:46:55 2024 -0400

    stream_tcp: move prev_norm object from TcpNormalizer to TcpNormalizerState

src/stream/tcp/tcp_normalizer.h
src/stream/tcp/tcp_normalizers.cc

index 1e800ad3c7c11b5ddfc721139a3748d7b392ed2a..a50397b0a38deada338471466ffc997eae5eee19 100644 (file)
 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
index 599a3cb11f366d155ccb72ab5faee0c00a51e391..7b0f306a4f1d556d1b917f6e2cee790af57a1d40 100644 (file)
@@ -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];