diff options
author | ps <ps@FreeBSD.org> | 2005-02-16 01:46:17 +0000 |
---|---|---|
committer | ps <ps@FreeBSD.org> | 2005-02-16 01:46:17 +0000 |
commit | 050a349d745c648534dc5d4bf551d4c1dd56c670 (patch) | |
tree | e9539f7f9793c116bbe1cf9256bd558e789900ae /sys/netinet/tcp_reass.c | |
parent | a4a07104a28b5d47bd62767056ad01aebce80188 (diff) | |
download | FreeBSD-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.c | 9 |
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 |