From bb0d02704457643cac3ef88b9261a091409e65d2 Mon Sep 17 00:00:00 2001 From: hsu Date: Wed, 25 Feb 2004 08:53:17 +0000 Subject: Relax a KASSERT condition to allow for a valid corner case where the FIN on the last segment consumes an extra sequence number. Spurious panic reported by Mike Silbersack . --- sys/netinet/tcp_input.c | 7 +++++-- sys/netinet/tcp_reass.c | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) (limited to 'sys/netinet') diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c index 151e083..2b4c564 100644 --- a/sys/netinet/tcp_input.c +++ b/sys/netinet/tcp_input.c @@ -1917,6 +1917,7 @@ trimthenstep6: 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 @@ trimthenstep6: (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 151e083..2b4c564 100644 --- a/sys/netinet/tcp_reass.c +++ b/sys/netinet/tcp_reass.c @@ -1917,6 +1917,7 @@ trimthenstep6: 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 @@ trimthenstep6: (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) -- cgit v1.1