diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c index 151e08360762..2b4c564ed6c1 100644 --- a/sys/netinet/tcp_input.c +++ b/sys/netinet/tcp_input.c @@ -1917,6 +1917,7 @@ tcp_input(m, off0) u_long oldcwnd = tp->snd_cwnd; tcp_seq oldsndmax = tp->snd_max; u_int sent; + KASSERT(tp->t_dupacks == 1 || tp->t_dupacks == 2, ("dupacks not 1 or 2")); @@ -1929,8 +1930,10 @@ tcp_input(m, off0) (void) tcp_output(tp); sent = tp->snd_max - oldsndmax; if (sent > tp->t_maxseg) { - KASSERT(tp->snd_limited == 0 && - tp->t_dupacks == 2, + KASSERT((tp->t_dupacks == 2 && + tp->snd_limited == 0) || + (sent == tp->t_maxseg + 1 && + tp->t_flags & TF_SENTFIN), ("sent too much")); tp->snd_limited = 2; } else if (sent > 0) diff --git a/sys/netinet/tcp_reass.c b/sys/netinet/tcp_reass.c index 151e08360762..2b4c564ed6c1 100644 --- a/sys/netinet/tcp_reass.c +++ b/sys/netinet/tcp_reass.c @@ -1917,6 +1917,7 @@ tcp_input(m, off0) u_long oldcwnd = tp->snd_cwnd; tcp_seq oldsndmax = tp->snd_max; u_int sent; + KASSERT(tp->t_dupacks == 1 || tp->t_dupacks == 2, ("dupacks not 1 or 2")); @@ -1929,8 +1930,10 @@ tcp_input(m, off0) (void) tcp_output(tp); sent = tp->snd_max - oldsndmax; if (sent > tp->t_maxseg) { - KASSERT(tp->snd_limited == 0 && - tp->t_dupacks == 2, + KASSERT((tp->t_dupacks == 2 && + tp->snd_limited == 0) || + (sent == tp->t_maxseg + 1 && + tp->t_flags & TF_SENTFIN), ("sent too much")); tp->snd_limited = 2; } else if (sent > 0)