]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge pull request #2598 in SNORT/snort3 from ~DAVMCPHE/snort3:stream_meta-ack_tweaks...
authorMasud Hasan (mashasan) <mashasan@cisco.com>
Tue, 10 Nov 2020 13:54:36 +0000 (13:54 +0000)
committerMasud Hasan (mashasan) <mashasan@cisco.com>
Tue, 10 Nov 2020 13:54:36 +0000 (13:54 +0000)
Squashed commit of the following:

commit 66fac93883643ab1106370c80dbe6c83920f431d
Author: davis mcpherson <davmcphe@cisco.com>
Date:   Wed Nov 4 12:45:37 2020 -0500

    stream_tcp: remove redundant/unneeded asserts that check if tcp event is for a meta-ack psuedo-packet

src/stream/tcp/tcp_segment_descriptor.cc
src/stream/tcp/tcp_segment_descriptor.h
src/stream/tcp/tcp_state_listen.cc
src/stream/tcp/tcp_state_none.cc
src/stream/tcp/tcp_state_syn_recv.cc
src/stream/tcp/tcp_state_syn_sent.cc

index 125b32c8ee348198939082a413a2dabec54692a3..8b0ee0b66f3541dd0e842789660dc835699ae0b9 100644 (file)
@@ -155,8 +155,6 @@ bool TcpSegmentDescriptor::has_wscale()
 
 void TcpSegmentDescriptor::set_retransmit_flag()
 {
-    assert(!meta_ack_packet);
-
     if ( PacketTracer::is_active() )
     {
         PacketTracer::log("Packet was retransmitted and %s from the retry queue.\n",
index 222558bbbc63ebf3e3b8b753c242c60dd62b58b1..4a1909724cc2c5c70378308e40f63980d20b7034 100644 (file)
@@ -109,20 +109,11 @@ public:
     { return pkt->dsize; }
 
     void set_len(uint16_t seg_len)
-    {
-        assert(!meta_ack_packet);
-        pkt->dsize = seg_len;
-    }
+    { pkt->dsize = seg_len; }
 
     bool is_data_segment() const
     { return pkt->dsize > 0; }
 
-    void update_len(int32_t offset)
-    {
-        assert(!meta_ack_packet);
-        pkt->dsize += offset;
-    }
-
     bool is_packet_from_client() const
     { return packet_from_client; }
 
@@ -131,17 +122,13 @@ public:
 
     void slide_segment_in_rcv_window(int32_t offset)
     {
-        assert(!meta_ack_packet);
         seq += offset;
         pkt->data += offset;
         pkt->dsize -= offset;
     }
 
     void set_packet_flags(uint32_t flags) const
-    {
-        assert(!meta_ack_packet);
-        pkt->packet_flags |= flags;
-    }
+    { pkt->packet_flags |= flags; }
 
     bool are_packet_flags_set(uint32_t flags) const
     { return (pkt->packet_flags & flags) == flags; }
@@ -163,7 +150,6 @@ public:
 
     void rewrite_payload(uint16_t offset, uint8_t* from, uint16_t length)
     {
-        assert(!meta_ack_packet);
         memcpy(const_cast<uint8_t*>(pkt->data + offset), from, length);
         set_packet_flags(PKT_MODIFIED);
     }
index dfd52b4839397dd495d4fa60efdbda95d86b4ff6..0f9f3dd4230599b7a982d4aa76824e310ef9afd4 100644 (file)
@@ -37,7 +37,7 @@ TcpStateListen::TcpStateListen(TcpStateMachine& tsm) :
 
 bool TcpStateListen::syn_sent(TcpSegmentDescriptor& tsd, TcpStreamTracker& trk)
 {
-    if ( trk.session->tcp_config->require_3whs() || tsd.has_wscale() || ( tsd.is_data_segment() ) )
+    if ( trk.session->tcp_config->require_3whs() || tsd.has_wscale() || tsd.is_data_segment() )
     {
         if ( tsd.is_packet_from_server() )
             trk.session->tel.set_tcp_event(EVENT_4WHS);
@@ -93,7 +93,7 @@ bool TcpStateListen::syn_ack_recv(TcpSegmentDescriptor& tsd, TcpStreamTracker& t
 bool TcpStateListen::ack_sent(TcpSegmentDescriptor& tsd, TcpStreamTracker& trk)
 {
     if ( trk.session->tcp_config->midstream_allowed(tsd.get_pkt())
-         && (tsd.has_wscale() || (tsd.is_data_segment() )) )
+         && (tsd.has_wscale() || tsd.is_data_segment()) )
     {
         Flow* flow = tsd.get_flow();
         flow->session_state |= ( STREAM_STATE_ACK | STREAM_STATE_SYN_ACK |
@@ -113,7 +113,7 @@ bool TcpStateListen::ack_sent(TcpSegmentDescriptor& tsd, TcpStreamTracker& trk)
 
 bool TcpStateListen::ack_recv(TcpSegmentDescriptor& tsd, TcpStreamTracker& trk)
 {
-    if ( trk.session->is_midstream_allowed(tsd) && (tsd.has_wscale() || (tsd.is_data_segment() )) )
+    if ( trk.session->is_midstream_allowed(tsd) && (tsd.has_wscale() || tsd.is_data_segment()) )
     {
         Flow* flow = tsd.get_flow();
 
index fa27ecf69d43d96303ecd6b0109c0be5322a22c6..95a63cde323b9f10d5f6fd92aabe4b69e6693ffa 100644 (file)
@@ -88,7 +88,7 @@ bool TcpStateNone::syn_ack_recv(TcpSegmentDescriptor& tsd, TcpStreamTracker& trk
 
 bool TcpStateNone::ack_sent(TcpSegmentDescriptor& tsd, TcpStreamTracker& trk)
 {
-    if ( trk.session->is_midstream_allowed(tsd) && (tsd.has_wscale() || (tsd.is_data_segment())) )
+    if ( trk.session->is_midstream_allowed(tsd) && (tsd.has_wscale() || tsd.is_data_segment()) )
     {
         Flow* flow = tsd.get_flow();
 
@@ -108,7 +108,7 @@ bool TcpStateNone::ack_sent(TcpSegmentDescriptor& tsd, TcpStreamTracker& trk)
 
 bool TcpStateNone::ack_recv(TcpSegmentDescriptor& tsd, TcpStreamTracker& trk)
 {
-    if ( trk.session->is_midstream_allowed(tsd) && (tsd.has_wscale() || (tsd.is_data_segment())) )
+    if ( trk.session->is_midstream_allowed(tsd) && (tsd.has_wscale() || tsd.is_data_segment()) )
     {
         Flow* flow = tsd.get_flow();
 
index 2e6a19e844669487ae4c92845eb1aaffc876c522..bab35624b6a59261db934a9aae3c2a5dc13df086 100644 (file)
@@ -33,8 +33,7 @@ using namespace snort;
 
 TcpStateSynRecv::TcpStateSynRecv(TcpStateMachine& tsm) :
     TcpStateHandler(TcpStreamTracker::TCP_SYN_RECV, tsm)
-{
-}
+{ }
 
 bool TcpStateSynRecv::syn_sent(TcpSegmentDescriptor& tsd, TcpStreamTracker& trk)
 {
@@ -52,6 +51,7 @@ bool TcpStateSynRecv::syn_sent(TcpSegmentDescriptor& tsd, TcpStreamTracker& trk)
         flow->set_session_flags(SSNFLAG_SEEN_SERVER);
         trk.session->tel.set_tcp_event(EVENT_4WHS);
     }
+
     return true;
 }
 
@@ -59,6 +59,7 @@ bool TcpStateSynRecv::syn_recv(TcpSegmentDescriptor& tsd, TcpStreamTracker& trk)
 {
     if ( tsd.is_data_segment() )
         trk.session->handle_data_on_syn(tsd);
+
     return true;
 }
 
@@ -69,6 +70,7 @@ bool TcpStateSynRecv::syn_ack_sent(TcpSegmentDescriptor& tsd, TcpStreamTracker&
     trk.finish_server_init(tsd);
     trk.normalizer.ecn_tracker(tsd.get_tcph(), trk.session->tcp_config->require_3whs());
     flow->session_state |= STREAM_STATE_SYN_ACK;
+
     return true;
 }
 
@@ -87,21 +89,21 @@ bool TcpStateSynRecv::syn_ack_recv(TcpSegmentDescriptor& tsd, TcpStreamTracker&
         if ( tsd.is_data_segment() )
             trk.session->handle_data_on_syn(tsd);
     }
+
     return true;
 }
 
 bool TcpStateSynRecv::ack_sent(TcpSegmentDescriptor& tsd, TcpStreamTracker& trk)
 {
     if ( trk.session->tcp_config->midstream_allowed(tsd.get_pkt()) )
-    {
-        trk.session->update_session_on_ack( );
-    }
+        trk.session->update_session_on_ack();
+
     return true;
 }
 
 bool TcpStateSynRecv::ack_recv(TcpSegmentDescriptor& tsd, TcpStreamTracker& trk)
 {
-    if ( trk.is_ack_valid(tsd.get_ack()) )
+    if ( !tsd.is_meta_ack_packet() && trk.is_ack_valid(tsd.get_ack()) )
     {
         Flow* flow = tsd.get_flow();
 
@@ -117,6 +119,7 @@ bool TcpStateSynRecv::ack_recv(TcpSegmentDescriptor& tsd, TcpStreamTracker& trk)
         else
             trk.session->check_for_window_slam(tsd);
     }
+
     return true;
 }
 
@@ -125,6 +128,7 @@ bool TcpStateSynRecv::data_seg_sent(TcpSegmentDescriptor& tsd, TcpStreamTracker&
     trk.update_tracker_ack_sent(tsd);
     if ( trk.session->no_ack_mode_enabled() )
         trk.update_tracker_no_ack_recv(tsd);
+
     return true;
 }
 
@@ -140,6 +144,7 @@ bool TcpStateSynRecv::data_seg_recv(TcpSegmentDescriptor& tsd, TcpStreamTracker&
     }
     if ( tsd.is_data_segment() )
         trk.session->handle_data_segment(tsd);
+
     return true;
 }
 
@@ -161,6 +166,7 @@ bool TcpStateSynRecv::fin_recv(TcpSegmentDescriptor& tsd, TcpStreamTracker& trk)
             trk.set_tcp_state(TcpStreamTracker::TCP_CLOSE_WAIT);
         }
     }
+
     return true;
 }
 
@@ -182,6 +188,7 @@ bool TcpStateSynRecv::rst_recv(TcpSegmentDescriptor& tsd, TcpStreamTracker& trk)
     // FIXIT-L might be good to create alert specific to RST with data
     if ( tsd.is_data_segment() )
         trk.session->tel.set_tcp_event(EVENT_DATA_AFTER_RST_RCVD);
+
     return true;
 }
 
index deb555d996ed63e52cba89cf9ae46228ebbe9482..ad37f36e6334f31318771157667d0a0c918e053b 100644 (file)
@@ -36,6 +36,7 @@ TcpStateSynSent::TcpStateSynSent(TcpStateMachine& tsm) :
 bool TcpStateSynSent::syn_sent(TcpSegmentDescriptor& tsd, TcpStreamTracker& trk)
 {
     trk.session->check_for_repeated_syn(tsd);
+
     return true;
 }
 
@@ -45,6 +46,7 @@ bool TcpStateSynSent::syn_recv(TcpSegmentDescriptor& tsd, TcpStreamTracker& trk)
     if ( tsd.is_data_segment() )
         trk.session->handle_data_on_syn(tsd);
     trk.set_tcp_state(TcpStreamTracker::TCP_SYN_RECV);
+
     return true;
 }
 
@@ -72,13 +74,15 @@ bool TcpStateSynSent::ack_sent(TcpSegmentDescriptor& tsd, TcpStreamTracker& trk)
     trk.session->update_timestamp_tracking(tsd);
     trk.session->update_perf_base_state(TcpStreamTracker::TCP_ESTABLISHED);
     trk.set_tcp_state(TcpStreamTracker::TCP_ESTABLISHED);
+
     return true;
 }
 
 bool TcpStateSynSent::ack_recv(TcpSegmentDescriptor& tsd, TcpStreamTracker& trk)
 {
-    if ( tsd.is_data_segment() )
+    if ( !tsd.is_meta_ack_packet() && tsd.is_data_segment() )
         trk.session->handle_data_segment(tsd);
+
     return true;
 }
 
@@ -92,12 +96,14 @@ bool TcpStateSynSent::data_seg_sent(TcpSegmentDescriptor& tsd, TcpStreamTracker&
     trk.session->update_timestamp_tracking(tsd);
     trk.session->update_perf_base_state(TcpStreamTracker::TCP_ESTABLISHED);
     trk.set_tcp_state(TcpStreamTracker::TCP_ESTABLISHED);
+
     return true;
 }
 
 bool TcpStateSynSent::data_seg_recv(TcpSegmentDescriptor& tsd, TcpStreamTracker& trk)
 {
     trk.session->handle_data_segment(tsd);
+
     return true;
 }
 
@@ -105,6 +111,7 @@ bool TcpStateSynSent::fin_recv(TcpSegmentDescriptor& tsd, TcpStreamTracker& trk)
 {
     if ( tsd.is_data_segment() )
         trk.session->handle_data_segment(tsd);
+
     return true;
 }
 
@@ -122,6 +129,7 @@ bool TcpStateSynSent::rst_recv(TcpSegmentDescriptor& tsd, TcpStreamTracker& trk)
     // FIXIT-L might be good to create alert specific to RST with data
     if ( tsd.is_data_segment() )
         trk.session->tel.set_tcp_event(EVENT_DATA_AFTER_RST_RCVD);
+
     return true;
 }