diff options
author | gVisor bot <gvisor-bot@google.com> | 2019-06-14 05:43:52 +0000 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2019-06-14 05:43:52 +0000 |
commit | 4f2b24601d90d855aab81e2a2f46b24006e9e6a1 (patch) | |
tree | d4bd42925430d0fc7b2d08203920e9feb9001be6 /pkg/tcpip/transport/tcp/sack.go | |
parent | 58aedc71d875019d345efc73e3ea42327e71fbf9 (diff) | |
parent | 3d71c627fa03a2da694ec88d690c633a15951fb0 (diff) |
Merge 3d71c627 (automated)
Diffstat (limited to 'pkg/tcpip/transport/tcp/sack.go')
-rw-r--r-- | pkg/tcpip/transport/tcp/sack.go | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/pkg/tcpip/transport/tcp/sack.go b/pkg/tcpip/transport/tcp/sack.go index 52c5d9867..7be86d68e 100644 --- a/pkg/tcpip/transport/tcp/sack.go +++ b/pkg/tcpip/transport/tcp/sack.go @@ -31,6 +31,13 @@ const ( // segment identified by segStart->segEnd. func UpdateSACKBlocks(sack *SACKInfo, segStart seqnum.Value, segEnd seqnum.Value, rcvNxt seqnum.Value) { newSB := header.SACKBlock{Start: segStart, End: segEnd} + + // Ignore any invalid SACK blocks or blocks that are before rcvNxt as + // those bytes have already been acked. + if newSB.End.LessThanEq(newSB.Start) || newSB.End.LessThan(rcvNxt) { + return + } + if sack.NumBlocks == 0 { sack.Blocks[0] = newSB sack.NumBlocks = 1 @@ -39,9 +46,8 @@ func UpdateSACKBlocks(sack *SACKInfo, segStart seqnum.Value, segEnd seqnum.Value var n = 0 for i := 0; i < sack.NumBlocks; i++ { start, end := sack.Blocks[i].Start, sack.Blocks[i].End - if end.LessThanEq(start) || start.LessThanEq(rcvNxt) { - // Discard any invalid blocks where end is before start - // and discard any sack blocks that are before rcvNxt as + if end.LessThanEq(rcvNxt) { + // Discard any sack blocks that are before rcvNxt as // those have already been acked. continue } |