diff --git a/pkg/sentry/fsimpl/sockfs/sockfs.go b/pkg/sentry/fsimpl/sockfs/sockfs.go index 75934ecd0..dcb899936 100644 --- a/pkg/sentry/fsimpl/sockfs/sockfs.go +++ b/pkg/sentry/fsimpl/sockfs/sockfs.go @@ -117,7 +117,7 @@ func NewDentry(ctx context.Context, mnt *vfs.Mount) *vfs.Dentry { fs := mnt.Filesystem().Impl().(*filesystem) // File mode matches net/socket.c:sock_alloc. - filemode := linux.FileMode(linux.S_IFSOCK | 0600) + filemode := linux.FileMode(linux.S_IFSOCK | 0777) i := &inode{} i.InodeAttrs.Init(ctx, auth.CredentialsFromContext(ctx), linux.UNNAMED_MAJOR, fs.devMinor, fs.Filesystem.NextIno(), filemode) diff --git a/test/syscalls/linux/socket.cc b/test/syscalls/linux/socket.cc index d2762b6e9..65e3260e4 100644 --- a/test/syscalls/linux/socket.cc +++ b/test/syscalls/linux/socket.cc @@ -183,6 +183,16 @@ TEST(SocketTest, UnixSCMRightsOnlyPassedOnce) { ASSERT_TRUE(WIFEXITED(status) && WEXITSTATUS(status) == 0); } +TEST(SocketTest, Permission) { + SKIP_IF(IsRunningWithVFS1()); + + FileDescriptor socket = + ASSERT_NO_ERRNO_AND_VALUE(Socket(AF_UNIX, SOCK_DGRAM, 0)); + + auto stat = ASSERT_NO_ERRNO_AND_VALUE(Fstat(socket.get())); + EXPECT_EQ(0777, stat.st_mode & ~S_IFMT); +} + using SocketOpenTest = ::testing::TestWithParam; // UDS cannot be opened.