|
|
|
|
@ -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;
|
|
|
|
|
|