svn commit: r220156 - head/sys/netinet

John Baldwin jhb at FreeBSD.org
Wed Mar 30 12:35:40 UTC 2011


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


More information about the svn-src-all mailing list