Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 21 May 2020 16:31:57 -0700 (PDT)
From:      "Rodney W. Grimes" <freebsd@gndrsh.dnsmgr.net>
To:        Richard Scheffenegger <rscheff@freebsd.org>
Cc:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org
Subject:   Re: svn commit: r361340 - in stable/12/sys/netinet: . tcp_stacks
Message-ID:  <202005212331.04LNVvac018957@gndrsh.dnsmgr.net>
In-Reply-To: <202005211941.04LJfPQ0023810@repo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
> 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@freebsd.org



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202005212331.04LNVvac018957>