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