Merge in SNORT/snort3 from ~JALIIMRA/snort3:update_rcv_nxt to master
Squashed commit of the following:
commit
d04ba2b4f24c2f035509b4801e60a98d9452fbcb
Author: Juweria Ali Imran <jaliimra@cisco.com>
Date: Fri Sep 29 16:58:49 2023 -0400
stream_tcp: update rcv_nxt appropriately for each segment
if (flush_pt >= 0)
{
trs.sos.seglist.cur_sseg = tsn;
+ update_rcv_nxt(trs, *tsn);
return flush_pt;
}
}
trs.sos.seglist.cur_sseg = tsn;
+ update_rcv_nxt(trs, *tsn);
return ret_val;
}
}
}
+void TcpReassembler::update_rcv_nxt(TcpReassemblerState& trs, TcpSegmentNode& tsn)
+{
+ uint32_t temp = (tsn.i_seq + tsn.i_len);
+
+ if (!trs.tracker->ooo_packet_seen and SEQ_LT(trs.tracker->rcv_nxt, temp))
+ trs.tracker->ooo_packet_seen = true;
+
+ trs.tracker->rcv_nxt = temp;
+}
+
bool TcpReassembler::has_seglist_hole(TcpReassemblerState& trs, TcpSegmentNode& tsn, PAF_State& ps,
uint32_t& total, uint32_t& flags)
{
void update_next(TcpReassemblerState&, const TcpSegmentNode&);
void update_skipped_bytes(uint32_t, TcpReassemblerState&);
void check_first_segment_hole(TcpReassemblerState&);
+ void update_rcv_nxt(TcpReassemblerState&, TcpSegmentNode&);
bool has_seglist_hole(TcpReassemblerState&, TcpSegmentNode&, PAF_State&, uint32_t& total,
uint32_t& flags);
void skip_seglist_hole(TcpReassemblerState&, snort::Packet*, uint32_t flags,
tcp_init = false;
tcpStats.released++;
+ client.ooo_packet_seen = false;
+ server.ooo_packet_seen = false;
+
if ( flush_segments )
{
client.reassembler.flush_queued_segments(flow, true, p);
if ( !(flow->get_session_flags() & SSNFLAG_STREAM_ORDER_BAD) )
flow->set_session_flags(SSNFLAG_STREAM_ORDER_BAD);
tsd.set_packet_flags(PKT_STREAM_ORDER_BAD);
- }
+ }
}
}
if ( tsd.is_data_segment() )
{
- update_stream_order(tsd, true);
+ update_stream_order(tsd, !listener->ooo_packet_seen);
process_tcp_stream(tsd);
return STREAM_ALIGNED;
}
bool client_tracker;
bool require_3whs = false;
bool rst_pkt_sent = false;
+ bool ooo_packet_seen = false;
// FIXIT-L make these non-public
public: