summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorBhasker Hariharan <bhaskerh@google.com>2020-11-06 13:53:21 -0800
committergVisor bot <gvisor-bot@google.com>2020-11-06 13:55:30 -0800
commit9e82747d62e57ee7498c8f3f54c313917891273a (patch)
tree731bedc71bce9ce3825f31b7f3efeb7c0e4bd363
parent949dc1d096aa9ac58c73cc861b95c8172d82dfcd (diff)
Return early in walkSACK if segment has no SACK blocks.
This avoids a needless allocation. Updates #231 PiperOrigin-RevId: 341113160
-rw-r--r--pkg/tcpip/transport/tcp/snd.go4
1 files changed, 4 insertions, 0 deletions
diff --git a/pkg/tcpip/transport/tcp/snd.go b/pkg/tcpip/transport/tcp/snd.go
index 6fa8d63cd..ab5fa4fb7 100644
--- a/pkg/tcpip/transport/tcp/snd.go
+++ b/pkg/tcpip/transport/tcp/snd.go
@@ -1285,6 +1285,10 @@ func (s *sender) checkDuplicateAck(seg *segment) (rtx bool) {
// See: https://tools.ietf.org/html/draft-ietf-tcpm-rack-08#section-7.2
// steps 2 and 3.
func (s *sender) walkSACK(rcvdSeg *segment) {
+ if len(rcvdSeg.parsedOptions.SACKBlocks) == 0 {
+ return
+ }
+
// Sort the SACK blocks. The first block is the most recent unacked
// block. The following blocks can be in arbitrary order.
sackBlocks := make([]header.SACKBlock, len(rcvdSeg.parsedOptions.SACKBlocks))