summaryrefslogtreecommitdiffstats
path: root/src/vnet/tcp/tcp_input.c
diff options
context:
space:
mode:
authorFlorin Coras <fcoras@cisco.com>2019-10-22 19:44:45 -0700
committerDamjan Marion <dmarion@me.com>2019-10-23 07:45:00 +0000
commit81cb8e4092991d3fd1e24f0862c12548a2d4c714 (patch)
treef5d6470fec183a9738d534db9837c9929a002eb5 /src/vnet/tcp/tcp_input.c
parent386ebb6e2baa7d3b2535d646c04ccf852f859869 (diff)
tcp: fix sack retransmit beyond snd_nxt
Type: fix Ensure that sack retransmit logic does not try to inadvertently send new data. Change-Id: Idfda19643577d9c1b58e2af8d8283cabfbaf98e6 Signed-off-by: Florin Coras <fcoras@cisco.com>
Diffstat (limited to 'src/vnet/tcp/tcp_input.c')
-rwxr-xr-xsrc/vnet/tcp/tcp_input.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/vnet/tcp/tcp_input.c b/src/vnet/tcp/tcp_input.c
index 10f96fa7b59..744c5bc01c2 100755
--- a/src/vnet/tcp/tcp_input.c
+++ b/src/vnet/tcp/tcp_input.c
@@ -890,6 +890,12 @@ scoreboard_next_rxt_hole (sack_scoreboard_t * sb,
/* Rule (3): if hole not lost */
else if (seq_lt (hole->start, sb->high_sacked))
{
+ /* And we didn't already retransmit it */
+ if (seq_leq (hole->end, sb->high_rxt))
+ {
+ sb->cur_rxt_hole = TCP_INVALID_SACK_HOLE_INDEX;
+ return 0;
+ }
*snd_limited = 0;
sb->cur_rxt_hole = scoreboard_hole_index (sb, hole);
}