From 1656148490272a9b1f13dff7f5534e13e9b46bd2 Mon Sep 17 00:00:00 2001 From: Victor Julien Date: Thu, 30 Oct 2014 10:16:40 +0100 Subject: [PATCH] stream/async: fix session setup issues For these 2 cases: 1. Missing SYN: -> syn <= missing <- syn/ack -> ack -> data 2. Missing SYN and 3whs ACK: -> syn <= missing <- syn/ack -> ack <= missing -> data Fix session pickup. The next_win settings weren't correctly set, so that packets were rejected. Bug 1190. --- src/stream-tcp.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/stream-tcp.c b/src/stream-tcp.c index 844d8e1763..76b256bc99 100644 --- a/src/stream-tcp.c +++ b/src/stream-tcp.c @@ -850,6 +850,8 @@ static int StreamTcpPacketStateNone(ThreadVars *tv, Packet *p, ssn->client.last_ack = TCP_GET_ACK(p); ssn->server.last_ack = TCP_GET_SEQ(p); + ssn->server.next_win = ssn->server.last_ack + ssn->server.window; + /** If the client has a wscale option the server had it too, * so set the wscale for the server to max. Otherwise none * will have the wscale opt just like it should. */ @@ -1768,7 +1770,8 @@ static int StreamTcpPacketStateSynRecv(ThreadVars *tv, Packet *p, ssn->server.next_win = ssn->server.last_ack + ssn->server.window; if (ssn->flags & STREAMTCP_FLAG_MIDSTREAM) { - ssn->client.window = TCP_GET_WINDOW(p); + ssn->client.window = TCP_GET_WINDOW(p) << ssn->client.wscale; + ssn->client.next_win = ssn->client.last_ack + ssn->client.window; ssn->server.next_win = ssn->server.last_ack + ssn->server.window; /* window scaling for midstream pickups, we can't do much