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
This commit is contained in:
parent
95d4707398
commit
766282cbe7
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=220156
@ -1756,7 +1756,8 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so,
|
||||
(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
|
||||
|
Loading…
Reference in New Issue
Block a user