summaryrefslogtreecommitdiffhomepage
path: root/pkg/sentry/socket/unix/unix.go
diff options
context:
space:
mode:
authorAndrei Vagin <avagin@google.com>2020-06-02 19:17:53 -0700
committergVisor bot <gvisor-bot@google.com>2020-06-02 19:19:15 -0700
commite6334e81ca8d951e56f03d8ea0629e3c85556cf1 (patch)
tree3dc40f5413d9e3ababbe0b46bb43f99ab5c7d580 /pkg/sentry/socket/unix/unix.go
parentc615faaee42ab6c30f21a19a90f865548156ae97 (diff)
Check that two sockets with different types can't be connected to each other
PiperOrigin-RevId: 314450191
Diffstat (limited to 'pkg/sentry/socket/unix/unix.go')
-rw-r--r--pkg/sentry/socket/unix/unix.go13
1 files changed, 12 insertions, 1 deletions
diff --git a/pkg/sentry/socket/unix/unix.go b/pkg/sentry/socket/unix/unix.go
index 5b29e9d7f..c4c9db81b 100644
--- a/pkg/sentry/socket/unix/unix.go
+++ b/pkg/sentry/socket/unix/unix.go
@@ -417,7 +417,18 @@ func (s *socketOpsCommon) Connect(t *kernel.Task, sockaddr []byte, blocking bool
defer ep.Release()
// Connect the server endpoint.
- return s.ep.Connect(t, ep)
+ err = s.ep.Connect(t, ep)
+
+ if err == syserr.ErrWrongProtocolForSocket {
+ // Linux for abstract sockets returns ErrConnectionRefused
+ // instead of ErrWrongProtocolForSocket.
+ path, _ := extractPath(sockaddr)
+ if len(path) > 0 && path[0] == 0 {
+ err = syserr.ErrConnectionRefused
+ }
+ }
+
+ return err
}
// Write implements fs.FileOperations.Write.