summaryrefslogtreecommitdiffstats
path: root/sys/netinet/tcp_reass.c
diff options
context:
space:
mode:
authorps <ps@FreeBSD.org>2005-02-16 01:46:17 +0000
committerps <ps@FreeBSD.org>2005-02-16 01:46:17 +0000
commit050a349d745c648534dc5d4bf551d4c1dd56c670 (patch)
treee9539f7f9793c116bbe1cf9256bd558e789900ae /sys/netinet/tcp_reass.c
parenta4a07104a28b5d47bd62767056ad01aebce80188 (diff)
downloadFreeBSD-src-050a349d745c648534dc5d4bf551d4c1dd56c670.zip
FreeBSD-src-050a349d745c648534dc5d4bf551d4c1dd56c670.tar.gz
Fix for a SACK (receiver) bug where incorrect SACK blocks are
reported to the sender - in the case where the sender sends data outside the window (as WinXP does :(). Reported by: Sam Jensen <sam at wand dot net dot nz> Submitted by: Mohan Srinivasan
Diffstat (limited to 'sys/netinet/tcp_reass.c')
-rw-r--r--sys/netinet/tcp_reass.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/sys/netinet/tcp_reass.c b/sys/netinet/tcp_reass.c
index 1784551..c10a94c 100644
--- a/sys/netinet/tcp_reass.c
+++ b/sys/netinet/tcp_reass.c
@@ -1102,8 +1102,6 @@ after_listen:
if (tp->sack_enable) {
/* Delete stale (cumulatively acked) SACK holes */
tcp_del_sackholes(tp, th);
- tp->rcv_laststart = th->th_seq; /* last recv'd segment*/
- tp->rcv_lastend = th->th_seq + tlen;
}
/*
@@ -2297,8 +2295,11 @@ dodata: /* XXX */
thflags = tcp_reass(tp, th, &tlen, m);
tp->t_flags |= TF_ACKNOW;
}
- if (tp->sack_enable)
- tcp_update_sack_list(tp);
+ if (tp->sack_enable) {
+ tp->rcv_laststart = th->th_seq; /* last recv'd segment*/
+ tp->rcv_lastend = th->th_seq + tlen;
+ tcp_update_sack_list(tp);
+ }
/*
* Note the amount of data that peer has sent into
* our window, in order to estimate the sender's
OpenPOWER on IntegriCloud