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 <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
This commit is contained in:
Jérôme Duval
2023-04-16 18:53:41 +00:00
committed by waddlesplash
parent 7bfc9c6fc7
commit 7c58a5a3fb
@@ -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();