From 7c58a5a3fb0dab0cc2dc13edba4461ba3de972c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Sat, 15 Apr 2023 23:36:37 +0200 Subject: [PATCH] tcp: avoid overflow of the advertised window with window scaling enabled tcp_segment_header.advertised_window is 16 bits. Previously, instead of using the maximum window, zero would be sent, thus the partner wouldn't send anything. fix #18337 Change-Id: Ibff98ee58b84bdf52527a7821648a5faf20c5589 Reviewed-on: https://review.haiku-os.org/c/haiku/+/6359 Tested-by: Commit checker robot Reviewed-by: Adrien Destugues --- src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp b/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp index 42ed62ceab..33c8cb92e6 100644 --- a/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp +++ b/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp @@ -2067,9 +2067,8 @@ TCPEndpoint::_SendQueued(bool force, uint32 sendWindow) availableBytes = (fReceiveMaxAdvertised - fReceiveNext).Number(); if (fFlags & FLAG_OPTION_WINDOW_SCALE) - segment.advertised_window = availableBytes >> fReceiveWindowShift; - else - segment.advertised_window = min_c(TCP_MAX_WINDOW, availableBytes); + availableBytes >>= fReceiveWindowShift; + segment.advertised_window = min_c(TCP_MAX_WINDOW, availableBytes); segment.acknowledge = fReceiveNext.Number();