svn commit: r361340 - in stable/12/sys/netinet: . tcp_stacks
Rodney W. Grimes
freebsd at gndrsh.dnsmgr.net
Thu May 21 23:31:59 UTC 2020
> Author: rscheff
> Date: Thu May 21 19:41:25 2020
> New Revision: 361340
> URL: https://svnweb.freebsd.org/changeset/base/361340
>
> Log:
> MFC r360479: Prevent premature shrinking of the scaled receive window
>
> which can cause a TCP client to use invalid or stale TCP sequence numbers for ACK packets.
>
> Packets with old sequence numbers are ignored and not used to update the send window size.
> This might cause the TCP session to hang indefinitely under some circumstances.
There should of been a note here:
This does NOT contain the merge of the change to bbrv1 since at this
time that code does not exist in stable/12, and there is no plan to
merge that code to stable/12.
> Reported by: Cui Cheng
> Reviewed by: tuexen (mentor), rgrimes (mentor, blanket)
> Approved by: tuexen (mentor), rgrimes (mentor, blanket)
> MFC after: 3 weeks
> Sponsored by: NetApp, Inc.
> Differential Revision: https://reviews.freebsd.org/D24515
>
> Modified:
> stable/12/sys/netinet/tcp_output.c
> stable/12/sys/netinet/tcp_stacks/rack.c
> Directory Properties:
> stable/12/ (props changed)
>
> Modified: stable/12/sys/netinet/tcp_output.c
> ==============================================================================
> --- stable/12/sys/netinet/tcp_output.c Thu May 21 18:50:05 2020 (r361339)
> +++ stable/12/sys/netinet/tcp_output.c Thu May 21 19:41:25 2020 (r361340)
> @@ -1206,8 +1206,11 @@ send:
> if (flags & TH_SYN)
> th->th_win = htons((u_short)
> (min(sbspace(&so->so_rcv), TCP_MAXWIN)));
> - else
> + else {
> + /* Avoid shrinking window with window scaling. */
> + recwin = roundup2(recwin, 1 << tp->rcv_scale);
> th->th_win = htons((u_short)(recwin >> tp->rcv_scale));
> + }
>
> /*
> * Adjust the RXWIN0SENT flag - indicate that we have advertised
>
> Modified: stable/12/sys/netinet/tcp_stacks/rack.c
> ==============================================================================
> --- stable/12/sys/netinet/tcp_stacks/rack.c Thu May 21 18:50:05 2020 (r361339)
> +++ stable/12/sys/netinet/tcp_stacks/rack.c Thu May 21 19:41:25 2020 (r361340)
> @@ -8355,8 +8355,11 @@ send:
> if (flags & TH_SYN)
> th->th_win = htons((u_short)
> (min(sbspace(&so->so_rcv), TCP_MAXWIN)));
> - else
> + else {
> + /* Avoid shrinking window with window scaling. */
> + recwin = roundup2(recwin, 1 << tp->rcv_scale);
> th->th_win = htons((u_short)(recwin >> tp->rcv_scale));
> + }
> /*
> * Adjust the RXWIN0SENT flag - indicate that we have advertised a 0
> * window. This may cause the remote transmitter to stall. This
>
--
Rod Grimes rgrimes at freebsd.org
More information about the svn-src-stable
mailing list