Simplify and fix a bug in cc_ack_received()'s "are we congestion window limited"
logic (refer to [1] for associated discussion). snd_cwnd and snd_wnd are unsigned long and on 64 bit hosts, min() will truncate them to 32 bits and could therefore potentially corrupt the result (although under normal operation, neither variable should legitmately exceed 32 bits). [1] http://lists.freebsd.org/pipermail/freebsd-net/2013-January/034297.html Submitted by: jhb MFC after: 1 week
This commit is contained in:
parent
8ec81e3926
commit
5b648e797b
@ -285,7 +285,7 @@ cc_ack_received(struct tcpcb *tp, struct tcphdr *th, uint16_t type)
|
||||
INP_WLOCK_ASSERT(tp->t_inpcb);
|
||||
|
||||
tp->ccv->bytes_this_ack = BYTES_THIS_ACK(tp, th);
|
||||
if (tp->snd_cwnd == min(tp->snd_cwnd, tp->snd_wnd))
|
||||
if (tp->snd_cwnd <= tp->snd_wnd)
|
||||
tp->ccv->flags |= CCF_CWND_LIMITED;
|
||||
else
|
||||
tp->ccv->flags &= ~CCF_CWND_LIMITED;
|
||||
|
Loading…
Reference in New Issue
Block a user