From e0b4838471308ad0f7921b554eef9a89c271a651 Mon Sep 17 00:00:00 2001 From: Gurvinder Singh Date: Thu, 29 Apr 2010 08:19:00 +0200 Subject: [PATCH] fix bug 133, error caused by seq mismatch in fin_wait_2 state, whis was dicarding the packet which should be accepted --- src/stream-tcp.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/stream-tcp.c b/src/stream-tcp.c index bb3c7c809c..ab07bbb648 100644 --- a/src/stream-tcp.c +++ b/src/stream-tcp.c @@ -1640,7 +1640,8 @@ static int StreamTcpHandleFin(StreamTcpThread *stt, TcpSession *ssn, Packet *p) StreamTcpPacketSetState(p, ssn, TCP_CLOSE_WAIT); SCLogDebug("ssn %p: state changed to TCP_CLOSE_WAIT", ssn); - ssn->client.next_seq = TCP_GET_SEQ(p) + p->payload_len + 1; + if (SEQ_EQ(TCP_GET_SEQ(p), ssn->client.next_seq)) + ssn->client.next_seq = TCP_GET_SEQ(p) + p->payload_len + 1; ssn->server.next_seq = TCP_GET_ACK(p); SCLogDebug("ssn %p: ssn->server.next_seq %" PRIu32 "", ssn, ssn->server.next_seq); @@ -1671,7 +1672,8 @@ static int StreamTcpHandleFin(StreamTcpThread *stt, TcpSession *ssn, Packet *p) StreamTcpPacketSetState(p, ssn, TCP_FIN_WAIT1); SCLogDebug("ssn %p: state changed to TCP_FIN_WAIT1", ssn); - ssn->server.next_seq = TCP_GET_SEQ(p) + p->payload_len + 1; + if (SEQ_EQ(TCP_GET_SEQ(p), ssn->server.next_seq)) + ssn->server.next_seq = TCP_GET_SEQ(p) + p->payload_len + 1; ssn->client.next_seq = TCP_GET_ACK(p); SCLogDebug("ssn %p: ssn->server.next_seq %" PRIu32 "", ssn, ssn->server.next_seq);