]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge pull request #2073 in SNORT/snort3 from ~ZHIJLIU/snort3:CSCvs59026_badack to...
authorDavis McPherson (davmcphe) <davmcphe@cisco.com>
Wed, 25 Mar 2020 14:33:23 +0000 (14:33 +0000)
committerDavis McPherson (davmcphe) <davmcphe@cisco.com>
Wed, 25 Mar 2020 14:33:23 +0000 (14:33 +0000)
Squashed commit of the following:

commit c0f2ed2c2b2572310314aa5b7b53557b12cc9966
Author: Louis Zhijun Liu <zhijliu@cisco.com>
Date:   Wed Mar 11 17:44:19 2020 -0700

    stream_tcp: Out-of-order ACK processing fix

src/stream/tcp/tcp_session.cc
src/stream/tcp/tcp_state_syn_recv.cc
src/stream/tcp/tcp_state_syn_recv.h

index d186d3cf94eebe194700e3e12b382a9bc38427de..0f2ba718c26aefaef17ddbeb6058eb78154fbb3e 100644 (file)
@@ -1037,10 +1037,11 @@ bool TcpSession::validate_packet_established_session(TcpSegmentDescriptor& tsd)
 {
     pkt_action_mask |= listener->normalizer.handle_paws(tsd);
 
-    if ( pkt_action_mask & ACTION_BAD_PKT )
-        return false;
+    if ( SnortConfig::inline_mode() )
+       if ( tsd.get_tcph()->is_ack() && !listener->is_ack_valid(tsd.get_seg_ack()) )
+           pkt_action_mask |= ACTION_BAD_PKT;
 
-    return true;
+    return ( pkt_action_mask & ACTION_BAD_PKT ) ? false : true;
 }
 
 /*
index 454c9c30a4832cfb6f6bd29fc739a0c8a1e2668a..6d814006686a1613b77197c3636d07f109c106c1 100644 (file)
@@ -121,6 +121,14 @@ bool TcpStateSynRecv::ack_recv(TcpSegmentDescriptor& tsd, TcpStreamTracker& trk)
     return true;
 }
 
+bool TcpStateSynRecv::data_seg_sent(TcpSegmentDescriptor& tsd, TcpStreamTracker& trk)
+{
+    trk.update_tracker_ack_sent(tsd);
+    if ( trk.session->no_ack_mode_enabled() )
+        trk.update_tracker_no_ack_recv(tsd);
+    return true;
+}
+
 bool TcpStateSynRecv::data_seg_recv(TcpSegmentDescriptor& tsd, TcpStreamTracker& trk)
 {
     if ( trk.is_ack_valid(tsd.get_seg_ack()) )
index f52d70c5042875ca6fba718550a8daf1008be706..8a8a77d4a8ac3072349d5f3cd3ea7928eb650b9a 100644 (file)
@@ -35,6 +35,7 @@ public:
     bool syn_ack_recv(TcpSegmentDescriptor&, TcpStreamTracker&) override;
     bool ack_sent(TcpSegmentDescriptor&, TcpStreamTracker&) override;
     bool ack_recv(TcpSegmentDescriptor&, TcpStreamTracker&) override;
+    bool data_seg_sent(TcpSegmentDescriptor&, TcpStreamTracker&) override;
     bool data_seg_recv(TcpSegmentDescriptor&, TcpStreamTracker&) override;
     bool fin_recv(TcpSegmentDescriptor&, TcpStreamTracker&) override;
     bool rst_recv(TcpSegmentDescriptor&, TcpStreamTracker&) override;