From 2cff90bf947743248997bea984afd72aa1fe1e97 Mon Sep 17 00:00:00 2001 From: Hugo Santos Date: Thu, 5 Apr 2007 04:24:29 +0000 Subject: [PATCH] fixed a critical issue with TCP's FIN handling: if FIN was set on a packet with data, fReceiveNext would be rewritten with the queue's LastSeuence which would be effectively the required sequence - 1. Increment instead fReceiveNext with the buffer's size. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20571 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp b/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp index 9c2c1c870c..ede57c2f93 100644 --- a/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp +++ b/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp @@ -1017,7 +1017,7 @@ TCPEndpoint::Receive(tcp_segment_header &segment, net_buffer *buffer) if (buffer->size > 0) { fReceiveQueue.Add(buffer, segment.sequence); - fReceiveNext = fReceiveQueue.NextSequence(); + fReceiveNext += buffer->size; TRACE("Receive(): adding data, receive next = %lu!", (uint32)fReceiveNext); release_sem_etc(fReceiveLock, 1, B_DO_NOT_RESCHEDULE); @@ -1027,7 +1027,7 @@ TCPEndpoint::Receive(tcp_segment_header &segment, net_buffer *buffer) gBufferModule->free(buffer); if (segment.flags & TCP_FLAG_PUSH) - fReceiveQueue.SetPushPointer(fReceiveNext); + fReceiveQueue.SetPushPointer(fReceiveQueue.LastSequence()); return action; }