> 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 [email protected]
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"