diff options
author | gVisor bot <gvisor-bot@google.com> | 2020-06-05 20:45:38 +0000 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2020-06-05 20:45:38 +0000 |
commit | c87863c64b37914f145c9e84da8699f391995110 (patch) | |
tree | 3ed244c41928d4e85b186588c00dfbaf170c617a /pkg/sentry | |
parent | 2fa1b08cc1e3a2e3b545ac3739cea41803103b05 (diff) | |
parent | 526df4f52a07a02687dd43ceb752621a41883f95 (diff) |
Merge release-20200522.0-81-g526df4f5 (automated)
Diffstat (limited to 'pkg/sentry')
-rw-r--r-- | pkg/sentry/socket/netstack/netstack.go | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/pkg/sentry/socket/netstack/netstack.go b/pkg/sentry/socket/netstack/netstack.go index 60df51dae..e1e0c5931 100644 --- a/pkg/sentry/socket/netstack/netstack.go +++ b/pkg/sentry/socket/netstack/netstack.go @@ -33,6 +33,7 @@ import ( "syscall" "time" + "golang.org/x/sys/unix" "gvisor.dev/gvisor/pkg/abi/linux" "gvisor.dev/gvisor/pkg/amutex" "gvisor.dev/gvisor/pkg/binary" @@ -719,6 +720,14 @@ func (s *socketOpsCommon) Connect(t *kernel.Task, sockaddr []byte, blocking bool defer s.EventUnregister(&e) if err := s.Endpoint.Connect(addr); err != tcpip.ErrConnectStarted && err != tcpip.ErrAlreadyConnecting { + if (s.family == unix.AF_INET || s.family == unix.AF_INET6) && s.skType == linux.SOCK_STREAM { + // TCP unlike UDP returns EADDRNOTAVAIL when it can't + // find an available local ephemeral port. + if err == tcpip.ErrNoPortAvailable { + return syserr.ErrAddressNotAvailable + } + } + return syserr.TranslateNetstackError(err) } |