From 331721f5c85bb66dbd6e3f67c09e6442584e07d5 Mon Sep 17 00:00:00 2001 From: Sepherosa Ziehau Date: Tue, 8 May 2012 13:56:07 +0800 Subject: [PATCH] tcp/sack: Guard against ACK reordering when adding SACK blocks The reordered ACK could carry SACK blocks which are all covered by tcpcb.snd_una --- sys/netinet/tcp_sack.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sys/netinet/tcp_sack.c b/sys/netinet/tcp_sack.c index 403185e606..ea29afb565 100644 --- a/sys/netinet/tcp_sack.c +++ b/sys/netinet/tcp_sack.c @@ -311,7 +311,11 @@ tcp_sack_add_blocks(struct tcpcb *tp, struct tcpopt *to) boolean_t update; int error; - /* don't accept bad SACK blocks */ + /* Guard against ACK reordering */ + if (SEQ_LT(newsackblock->rblk_start, tp->snd_una)) + continue; + + /* Don't accept bad SACK blocks */ if (SEQ_GT(newsackblock->rblk_end, tp->snd_max)) { tcpstat.tcps_rcvbadsackopt++; break; /* skip all other blocks */ -- 2.41.0