summaryrefslogtreecommitdiffhomepage
path: root/pkg/tcpip/transport
diff options
context:
space:
mode:
authorZhaozhong Ni <nzz@google.com>2018-07-10 13:53:39 -0700
committerShentubot <shentubot@google.com>2018-07-10 13:54:40 -0700
commitbf580cf64dbea1c70a3269914fad6490f7a4968d (patch)
tree67c05c84857b450867021bc7e8c6995a6ee8dff2 /pkg/tcpip/transport
parent065d7cee9a558cf3e7cdaafe8d708efe76e2b703 (diff)
netstack: only do connected TCP S/R for loopback connections.
PiperOrigin-RevId: 204006237 Change-Id: Ica8402ab54d9dd7d11cc41c6d74aacef51d140b7
Diffstat (limited to 'pkg/tcpip/transport')
-rw-r--r--pkg/tcpip/transport/tcp/endpoint_state.go9
1 files changed, 7 insertions, 2 deletions
diff --git a/pkg/tcpip/transport/tcp/endpoint_state.go b/pkg/tcpip/transport/tcp/endpoint_state.go
index 43765d425..ad20407fa 100644
--- a/pkg/tcpip/transport/tcp/endpoint_state.go
+++ b/pkg/tcpip/transport/tcp/endpoint_state.go
@@ -50,11 +50,16 @@ func (e *endpoint) beforeSave() {
switch e.state {
case stateInitial, stateBound:
- case stateListen, stateConnecting, stateConnected:
- if e.state == stateConnected && !e.workerRunning {
+ case stateConnected:
+ if e.route.Capabilities()&stack.CapabilitySaveRestore == 0 {
+ panic(tcpip.ErrSaveRejection{fmt.Errorf("endpoint cannot be saved in connected state: local %v:%d, remote %v:%d", e.id.LocalAddress, e.id.LocalPort, e.id.RemoteAddress, e.id.RemotePort)})
+ }
+ if !e.workerRunning {
// The endpoint must be in acceptedChan.
break
}
+ fallthrough
+ case stateListen, stateConnecting:
e.drainSegmentLocked()
if e.state != stateClosed && e.state != stateError {
if !e.workerRunning {