summaryrefslogtreecommitdiffstats
path: root/sys/netinet/tcp_sack.c
diff options
context:
space:
mode:
authormohans <mohans@FreeBSD.org>2006-04-05 00:11:04 +0000
committermohans <mohans@FreeBSD.org>2006-04-05 00:11:04 +0000
commit0e65e2a5a10b937b38d0660be8adfc8d5ac81561 (patch)
tree545c746a9d828c78edbdb70aad3688afeebff07a /sys/netinet/tcp_sack.c
parentdb765ca50b66a2964dc7899aaa6a8e552ecab7ae (diff)
downloadFreeBSD-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.c2
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;
}
OpenPOWER on IntegriCloud