⛏️ index : haiku.git

author Jérôme Duval <jerome.duval@gmail.com> 2023-04-15 23:36:37.0 +02:00:00
committer waddlesplash <waddlesplash@gmail.com> 2023-04-16 18:54:22.0 +00:00:00
commit
ad5f3ccd7c9bfbcdd145ae9a6737cfb617dc313f [patch]
tree
0831ef604c645a775294c70f0431f0d60b2ec833
parent
8a68624821ba6d467e7174a30b83d5b970a8759a
download
ad5f3ccd7c9bfbcdd145ae9a6737cfb617dc313f.tar.gz

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 <no-reply+buildbot@haiku-os.org>
Reviewed-by: Adrien Destugues <pulkomandy@pulkomandy.tk>
(cherry picked from commit 7c58a5a3fb0dab0cc2dc13edba4461ba3de972c8)
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6339
Reviewed-by: waddlesplash <waddlesplash@gmail.com>

Diff

 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 0858cfc..f43a32d 100644
--- a/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp
+++ b/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp
@@ -2062,9 +2062,8 @@
		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();