Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 30 Mar 2011 12:35:39 +0000 (UTC)
From:      John Baldwin <jhb@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r220156 - head/sys/netinet
Message-ID:  <201103301235.p2UCZdwP063675@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jhb
Date: Wed Mar 30 12:35:39 2011
New Revision: 220156
URL: http://svn.freebsd.org/changeset/base/220156

Log:
  Clamp the initial advertised receive window when responding to a SYN/ACK
  to the maximum allowed window.  Growing the window too large would cause
  an underflow in the calculations in tcp_output() to decide if a window
  update should be sent which would prevent the persist timer from being
  started if data was pending and the other end of the connection advertised
  an initial window size of 0.
  
  PR:		kern/154006
  Submitted by:	Stefan `Sec` Zehl  sec 42 org
  Reviewed by:	bz
  MFC after:	1 week

Modified:
  head/sys/netinet/tcp_input.c

Modified: head/sys/netinet/tcp_input.c
==============================================================================
--- head/sys/netinet/tcp_input.c	Wed Mar 30 11:34:40 2011	(r220155)
+++ head/sys/netinet/tcp_input.c	Wed Mar 30 12:35:39 2011	(r220156)
@@ -1756,7 +1756,8 @@ tcp_do_segment(struct mbuf *m, struct tc
 				(TF_RCVD_SCALE|TF_REQ_SCALE)) {
 				tp->rcv_scale = tp->request_r_scale;
 			}
-			tp->rcv_adv += tp->rcv_wnd;
+			tp->rcv_adv += imin(tp->rcv_wnd,
+			    TCP_MAXWIN << tp->rcv_scale);
 			tp->snd_una++;		/* SYN is acked */
 			/*
 			 * If there's data, delay ACK; if there's also a FIN



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