diff options
author | gVisor bot <gvisor-bot@google.com> | 2019-12-12 01:56:59 +0000 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2019-12-12 01:56:59 +0000 |
commit | 0f875445ef31832b1c9c99430f55ba6cc569c203 (patch) | |
tree | ed1bde95db4436b2d560821b4ea44f78ff85d366 /pkg/tcpip/transport/tcp/accept.go | |
parent | f2fdb552f79df8cb062fb3c8cebfed5938a35aa0 (diff) | |
parent | 6fc9f0aefd89ce42ef2c38ea7853f9ba7c4bee04 (diff) |
Merge release-20191210.0-23-g6fc9f0a (automated)
Diffstat (limited to 'pkg/tcpip/transport/tcp/accept.go')
-rw-r--r-- | pkg/tcpip/transport/tcp/accept.go | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/pkg/tcpip/transport/tcp/accept.go b/pkg/tcpip/transport/tcp/accept.go index 74df3edfb..5422ae80c 100644 --- a/pkg/tcpip/transport/tcp/accept.go +++ b/pkg/tcpip/transport/tcp/accept.go @@ -242,6 +242,13 @@ func (l *listenContext) createConnectingEndpoint(s *segment, iss seqnum.Value, i n.initGSO() + // Now inherit any socket options that should be inherited from the + // listening endpoint. + // In case of Forwarder listenEP will be nil and hence this check. + if l.listenEP != nil { + l.listenEP.propagateInheritableOptions(n) + } + // Register new endpoint so that packets are routed to it. if err := n.stack.RegisterTransportEndpoint(n.boundNICID, n.effectiveNetProtos, ProtocolNumber, n.ID, n, n.reusePort, n.boundBindToDevice); err != nil { n.Close() @@ -350,6 +357,14 @@ func (e *endpoint) deliverAccepted(n *endpoint) { } } +// propagateInheritableOptions propagates any options set on the listening +// endpoint to the newly created endpoint. +func (e *endpoint) propagateInheritableOptions(n *endpoint) { + e.mu.Lock() + n.userTimeout = e.userTimeout + e.mu.Unlock() +} + // handleSynSegment is called in its own goroutine once the listening endpoint // receives a SYN segment. It is responsible for completing the handshake and // queueing the new endpoint for acceptance. |