diff --git a/src/stream-tcp.c b/src/stream-tcp.c index 8aa0edb0c6c3..7352f2bdc74f 100644 --- a/src/stream-tcp.c +++ b/src/stream-tcp.c @@ -3062,32 +3062,6 @@ static int HandleEstablishedPacketToClient( return 0; } -/** - * \internal - * - * \brief Find the highest sequence number needed to consider all segments as ACK'd - * - * Used to treat all segments as ACK'd upon receiving a valid RST. - * - * \param stream stream to inspect the segments from - * \param seq sequence number to check against - * - * \retval ack highest ack we need to set - */ -static inline uint32_t StreamTcpResetGetMaxAck(TcpStream *stream, uint32_t seq) -{ - uint32_t ack = seq; - - if (STREAM_HAS_SEEN_DATA(stream)) { - const uint32_t tail_seq = STREAM_SEQ_RIGHT_EDGE(stream); - if (SEQ_GT(tail_seq, ack)) { - ack = tail_seq; - } - } - - SCReturnUInt(ack); -} - static bool StreamTcpPacketIsZeroWindowProbeAck(const TcpSession *ssn, const Packet *p) { const TCPHdr *tcph = PacketGetTCP(p); @@ -3309,10 +3283,9 @@ static int StreamTcpPacketStateEstablished( ssn->client.window = window << ssn->client.wscale; if ((tcph->th_flags & TH_ACK) && StreamTcpValidateAck(ssn, &ssn->server, p) == 0) - StreamTcpUpdateLastAck( - ssn, &ssn->server, StreamTcpResetGetMaxAck(&ssn->server, window)); + StreamTcpUpdateLastAck(ssn, &ssn->server, ack); - StreamTcpUpdateLastAck(ssn, &ssn->client, StreamTcpResetGetMaxAck(&ssn->client, seq)); + StreamTcpUpdateLastAck(ssn, &ssn->client, seq); if (ssn->flags & STREAMTCP_FLAG_TIMESTAMP) { StreamTcpHandleTimestamp(ssn, p); @@ -3337,10 +3310,9 @@ static int StreamTcpPacketStateEstablished( ssn->server.window = window << ssn->server.wscale; if ((tcph->th_flags & TH_ACK) && StreamTcpValidateAck(ssn, &ssn->client, p) == 0) - StreamTcpUpdateLastAck( - ssn, &ssn->client, StreamTcpResetGetMaxAck(&ssn->client, ack)); + StreamTcpUpdateLastAck(ssn, &ssn->client, ack); - StreamTcpUpdateLastAck(ssn, &ssn->server, StreamTcpResetGetMaxAck(&ssn->server, seq)); + StreamTcpUpdateLastAck(ssn, &ssn->server, seq); if (ssn->flags & STREAMTCP_FLAG_TIMESTAMP) { StreamTcpHandleTimestamp(ssn, p); @@ -3641,10 +3613,9 @@ static int StreamTcpPacketStateFinWait1( if (PKT_IS_TOSERVER(p)) { if ((tcph->th_flags & TH_ACK) && StreamTcpValidateAck(ssn, &ssn->server, p) == 0) - StreamTcpUpdateLastAck( - ssn, &ssn->server, StreamTcpResetGetMaxAck(&ssn->server, ack)); + StreamTcpUpdateLastAck(ssn, &ssn->server, ack); - StreamTcpUpdateLastAck(ssn, &ssn->client, StreamTcpResetGetMaxAck(&ssn->client, seq)); + StreamTcpUpdateLastAck(ssn, &ssn->client, seq); if (ssn->flags & STREAMTCP_FLAG_TIMESTAMP) { StreamTcpHandleTimestamp(ssn, p); @@ -3653,10 +3624,9 @@ static int StreamTcpPacketStateFinWait1( StreamTcpReassembleHandleSegment(tv, stt->ra_ctx, ssn, &ssn->client, p); } else { if ((tcph->th_flags & TH_ACK) && StreamTcpValidateAck(ssn, &ssn->client, p) == 0) - StreamTcpUpdateLastAck( - ssn, &ssn->client, StreamTcpResetGetMaxAck(&ssn->client, ack)); + StreamTcpUpdateLastAck(ssn, &ssn->client, ack); - StreamTcpUpdateLastAck(ssn, &ssn->server, StreamTcpResetGetMaxAck(&ssn->server, seq)); + StreamTcpUpdateLastAck(ssn, &ssn->server, seq); if (ssn->flags & STREAMTCP_FLAG_TIMESTAMP) { StreamTcpHandleTimestamp(ssn, p); @@ -4085,10 +4055,9 @@ static int StreamTcpPacketStateFinWait2( if (PKT_IS_TOSERVER(p)) { if ((tcph->th_flags & TH_ACK) && StreamTcpValidateAck(ssn, &ssn->server, p) == 0) - StreamTcpUpdateLastAck( - ssn, &ssn->server, StreamTcpResetGetMaxAck(&ssn->server, ack)); + StreamTcpUpdateLastAck(ssn, &ssn->server, ack); - StreamTcpUpdateLastAck(ssn, &ssn->client, StreamTcpResetGetMaxAck(&ssn->client, seq)); + StreamTcpUpdateLastAck(ssn, &ssn->client, seq); if (ssn->flags & STREAMTCP_FLAG_TIMESTAMP) { StreamTcpHandleTimestamp(ssn, p); @@ -4097,10 +4066,9 @@ static int StreamTcpPacketStateFinWait2( StreamTcpReassembleHandleSegment(tv, stt->ra_ctx, ssn, &ssn->client, p); } else { if ((tcph->th_flags & TH_ACK) && StreamTcpValidateAck(ssn, &ssn->client, p) == 0) - StreamTcpUpdateLastAck( - ssn, &ssn->client, StreamTcpResetGetMaxAck(&ssn->client, ack)); + StreamTcpUpdateLastAck(ssn, &ssn->client, ack); - StreamTcpUpdateLastAck(ssn, &ssn->server, StreamTcpResetGetMaxAck(&ssn->server, seq)); + StreamTcpUpdateLastAck(ssn, &ssn->server, seq); if (ssn->flags & STREAMTCP_FLAG_TIMESTAMP) { StreamTcpHandleTimestamp(ssn, p); @@ -4385,10 +4353,9 @@ static int StreamTcpPacketStateClosing( if (PKT_IS_TOSERVER(p)) { if ((tcph->th_flags & TH_ACK) && StreamTcpValidateAck(ssn, &ssn->server, p) == 0) - StreamTcpUpdateLastAck( - ssn, &ssn->server, StreamTcpResetGetMaxAck(&ssn->server, ack)); + StreamTcpUpdateLastAck(ssn, &ssn->server, ack); - StreamTcpUpdateLastAck(ssn, &ssn->client, StreamTcpResetGetMaxAck(&ssn->client, seq)); + StreamTcpUpdateLastAck(ssn, &ssn->client, seq); if (ssn->flags & STREAMTCP_FLAG_TIMESTAMP) { StreamTcpHandleTimestamp(ssn, p); @@ -4397,10 +4364,9 @@ static int StreamTcpPacketStateClosing( StreamTcpReassembleHandleSegment(tv, stt->ra_ctx, ssn, &ssn->client, p); } else { if ((tcph->th_flags & TH_ACK) && StreamTcpValidateAck(ssn, &ssn->client, p) == 0) - StreamTcpUpdateLastAck( - ssn, &ssn->client, StreamTcpResetGetMaxAck(&ssn->client, ack)); + StreamTcpUpdateLastAck(ssn, &ssn->client, ack); - StreamTcpUpdateLastAck(ssn, &ssn->server, StreamTcpResetGetMaxAck(&ssn->server, seq)); + StreamTcpUpdateLastAck(ssn, &ssn->server, seq); if (ssn->flags & STREAMTCP_FLAG_TIMESTAMP) { StreamTcpHandleTimestamp(ssn, p); @@ -4560,10 +4526,9 @@ static int StreamTcpPacketStateCloseWait( if (PKT_IS_TOSERVER(p)) { if ((tcph->th_flags & TH_ACK) && StreamTcpValidateAck(ssn, &ssn->server, p) == 0) - StreamTcpUpdateLastAck( - ssn, &ssn->server, StreamTcpResetGetMaxAck(&ssn->server, ack)); + StreamTcpUpdateLastAck(ssn, &ssn->server, ack); - StreamTcpUpdateLastAck(ssn, &ssn->client, StreamTcpResetGetMaxAck(&ssn->client, seq)); + StreamTcpUpdateLastAck(ssn, &ssn->client, seq); if (ssn->flags & STREAMTCP_FLAG_TIMESTAMP) { StreamTcpHandleTimestamp(ssn, p); @@ -4572,10 +4537,9 @@ static int StreamTcpPacketStateCloseWait( StreamTcpReassembleHandleSegment(tv, stt->ra_ctx, ssn, &ssn->client, p); } else { if ((tcph->th_flags & TH_ACK) && StreamTcpValidateAck(ssn, &ssn->client, p) == 0) - StreamTcpUpdateLastAck( - ssn, &ssn->client, StreamTcpResetGetMaxAck(&ssn->client, ack)); + StreamTcpUpdateLastAck(ssn, &ssn->client, ack); - StreamTcpUpdateLastAck(ssn, &ssn->server, StreamTcpResetGetMaxAck(&ssn->server, seq)); + StreamTcpUpdateLastAck(ssn, &ssn->server, seq); if (ssn->flags & STREAMTCP_FLAG_TIMESTAMP) { StreamTcpHandleTimestamp(ssn, p); @@ -4845,10 +4809,9 @@ static int StreamTcpPacketStateLastAck( if (PKT_IS_TOSERVER(p)) { if ((tcph->th_flags & TH_ACK) && StreamTcpValidateAck(ssn, &ssn->server, p) == 0) - StreamTcpUpdateLastAck( - ssn, &ssn->server, StreamTcpResetGetMaxAck(&ssn->server, ack)); + StreamTcpUpdateLastAck(ssn, &ssn->server, ack); - StreamTcpUpdateLastAck(ssn, &ssn->client, StreamTcpResetGetMaxAck(&ssn->client, seq)); + StreamTcpUpdateLastAck(ssn, &ssn->client, seq); if (ssn->flags & STREAMTCP_FLAG_TIMESTAMP) { StreamTcpHandleTimestamp(ssn, p); @@ -4857,10 +4820,9 @@ static int StreamTcpPacketStateLastAck( StreamTcpReassembleHandleSegment(tv, stt->ra_ctx, ssn, &ssn->client, p); } else { if ((tcph->th_flags & TH_ACK) && StreamTcpValidateAck(ssn, &ssn->client, p) == 0) - StreamTcpUpdateLastAck( - ssn, &ssn->client, StreamTcpResetGetMaxAck(&ssn->client, ack)); + StreamTcpUpdateLastAck(ssn, &ssn->client, ack); - StreamTcpUpdateLastAck(ssn, &ssn->server, StreamTcpResetGetMaxAck(&ssn->server, seq)); + StreamTcpUpdateLastAck(ssn, &ssn->server, seq); if (ssn->flags & STREAMTCP_FLAG_TIMESTAMP) { StreamTcpHandleTimestamp(ssn, p); @@ -4968,10 +4930,9 @@ static int StreamTcpPacketStateTimeWait( if (PKT_IS_TOSERVER(p)) { if ((tcph->th_flags & TH_ACK) && StreamTcpValidateAck(ssn, &ssn->server, p) == 0) - StreamTcpUpdateLastAck( - ssn, &ssn->server, StreamTcpResetGetMaxAck(&ssn->server, ack)); + StreamTcpUpdateLastAck(ssn, &ssn->server, ack); - StreamTcpUpdateLastAck(ssn, &ssn->client, StreamTcpResetGetMaxAck(&ssn->client, seq)); + StreamTcpUpdateLastAck(ssn, &ssn->client, seq); if (ssn->flags & STREAMTCP_FLAG_TIMESTAMP) { StreamTcpHandleTimestamp(ssn, p); @@ -4980,10 +4941,9 @@ static int StreamTcpPacketStateTimeWait( StreamTcpReassembleHandleSegment(tv, stt->ra_ctx, ssn, &ssn->client, p); } else { if ((tcph->th_flags & TH_ACK) && StreamTcpValidateAck(ssn, &ssn->client, p) == 0) - StreamTcpUpdateLastAck( - ssn, &ssn->client, StreamTcpResetGetMaxAck(&ssn->client, ack)); + StreamTcpUpdateLastAck(ssn, &ssn->client, ack); - StreamTcpUpdateLastAck(ssn, &ssn->server, StreamTcpResetGetMaxAck(&ssn->server, seq)); + StreamTcpUpdateLastAck(ssn, &ssn->server, seq); if (ssn->flags & STREAMTCP_FLAG_TIMESTAMP) { StreamTcpHandleTimestamp(ssn, p);