tcp: fix 'broken ack' on flow timeout

Don't set an ACK value if ACK flag is no longer set. This avoids a bogus
`pkt_broken_ack` event set.

Fixes: ebf465a11b ("tcp: do not assign TCP flags to pseudopackets")

Ticket: #7158.
(cherry picked from commit a404fd26af)
pull/11688/head
Victor Julien 2 years ago committed by Victor Julien
parent 7b547c7cd6
commit 107cd77ecb

@ -223,7 +223,7 @@ static inline Packet *FlowForceReassemblyPseudoPacketSetup(Packet *p,
p->tcph->th_dport = htons(f->dp);
p->tcph->th_seq = htonl(ssn->client.next_seq);
p->tcph->th_ack = htonl(ssn->server.last_ack);
p->tcph->th_ack = 0;
/* to client */
} else {
@ -231,7 +231,7 @@ static inline Packet *FlowForceReassemblyPseudoPacketSetup(Packet *p,
p->tcph->th_dport = htons(f->sp);
p->tcph->th_seq = htonl(ssn->server.next_seq);
p->tcph->th_ack = htonl(ssn->client.last_ack);
p->tcph->th_ack = 0;
}
if (FLOW_IS_IPV4(f)) {

@ -5369,10 +5369,8 @@ int StreamTcpPacket (ThreadVars *tv, Packet *p, StreamTcpThread *stt,
* we care about reassembly here. */
if (p->flags & PKT_PSEUDO_STREAM_END) {
if (PKT_IS_TOCLIENT(p)) {
ssn->client.last_ack = TCP_GET_ACK(p);
StreamTcpReassembleHandleSegment(tv, stt->ra_ctx, ssn, &ssn->server, p);
} else {
ssn->server.last_ack = TCP_GET_ACK(p);
StreamTcpReassembleHandleSegment(tv, stt->ra_ctx, ssn, &ssn->client, p);
}
/* straight to 'skip' as we already handled reassembly */

Loading…
Cancel
Save