stream/tcp: fix async mode ACK validation

pull/5678/head
Victor Julien 5 years ago
parent 8d659c6500
commit 8aa02c6d15

@ -2014,8 +2014,7 @@ static int StreamTcpPacketStateSynRecv(ThreadVars *tv, Packet *p,
if (ssn->flags & STREAMTCP_FLAG_MIDSTREAM) {
ssn->server.window = TCP_GET_WINDOW(p);
ssn->client.next_win = ssn->server.last_ack +
ssn->server.window;
ssn->server.next_win = ssn->server.last_ack + ssn->server.window;
/* window scaling for midstream pickups, we can't do much
* other than assume that it's set to the max value: 14 */
ssn->server.wscale = TCP_WSCALE_MAX;
@ -5810,6 +5809,11 @@ static inline int StreamTcpValidateAck(TcpSession *ssn, TcpStream *stream, Packe
SCReturnInt(0);
}
/* no further checks possible for ASYNC */
if ((ssn->flags & STREAMTCP_FLAG_ASYNC) != 0) {
SCReturnInt(0);
}
if (ssn->state > TCP_SYN_SENT && SEQ_GT(ack, stream->next_win)) {
SCLogDebug("ACK %"PRIu32" is after next_win %"PRIu32, ack, stream->next_win);
goto invalid;

Loading…
Cancel
Save