diff options
author | mohans <mohans@FreeBSD.org> | 2006-04-05 00:11:04 +0000 |
---|---|---|
committer | mohans <mohans@FreeBSD.org> | 2006-04-05 00:11:04 +0000 |
commit | 0e65e2a5a10b937b38d0660be8adfc8d5ac81561 (patch) | |
tree | 545c746a9d828c78edbdb70aad3688afeebff07a /sys/netinet/tcp_sack.c | |
parent | db765ca50b66a2964dc7899aaa6a8e552ecab7ae (diff) | |
download | FreeBSD-src-0e65e2a5a10b937b38d0660be8adfc8d5ac81561.zip FreeBSD-src-0e65e2a5a10b937b38d0660be8adfc8d5ac81561.tar.gz |
Certain (bad) values of sack blocks can end up corrupting the sack scoreboard.
Make the checks in tcp_sack_doack() more robust to prevent this.
Submitted by: Raja Mukerji (raja@mukerji.com)
Reviewed by: Mohan Srinivasan
Diffstat (limited to 'sys/netinet/tcp_sack.c')
-rw-r--r-- | sys/netinet/tcp_sack.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/netinet/tcp_sack.c b/sys/netinet/tcp_sack.c index aa096fa..2d0a2c1 100644 --- a/sys/netinet/tcp_sack.c +++ b/sys/netinet/tcp_sack.c @@ -392,6 +392,8 @@ tcp_sack_doack(struct tcpcb *tp, struct tcpopt *to, tcp_seq th_ack) if (SEQ_GT(sack.end, sack.start) && SEQ_GT(sack.start, tp->snd_una) && SEQ_GT(sack.start, th_ack) && + SEQ_LT(sack.start, tp->snd_max) && + SEQ_GT(sack.end, tp->snd_una) && SEQ_LEQ(sack.end, tp->snd_max)) sack_blocks[num_sack_blks++] = sack; } |