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(-)
@@ -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();