summaryrefslogtreecommitdiffhomepage
path: root/pkg/sentry/fsimpl/sockfs/sockfs.go
diff options
context:
space:
mode:
authorDean Deng <deandeng@google.com>2020-04-27 16:00:39 -0700
committergVisor bot <gvisor-bot@google.com>2020-04-27 16:02:18 -0700
commit1c2ecbb1a03ffaa3bcdb2ee69c879da5e7076fa5 (patch)
tree51a1e0b3b5e1824918d75c032cd2834323469c9e /pkg/sentry/fsimpl/sockfs/sockfs.go
parent8f42cbfd0815ea34fdfe76c07f76966952d09bb7 (diff)
Import host sockets.
The FileDescription implementation for hostfs sockets uses the standard Unix socket implementation (unix.SocketVFS2), but is also tied to a hostfs dentry. Updates #1672, #1476 PiperOrigin-RevId: 308716426
Diffstat (limited to 'pkg/sentry/fsimpl/sockfs/sockfs.go')
-rw-r--r--pkg/sentry/fsimpl/sockfs/sockfs.go20
1 files changed, 4 insertions, 16 deletions
diff --git a/pkg/sentry/fsimpl/sockfs/sockfs.go b/pkg/sentry/fsimpl/sockfs/sockfs.go
index 5ce50625b..271134af8 100644
--- a/pkg/sentry/fsimpl/sockfs/sockfs.go
+++ b/pkg/sentry/fsimpl/sockfs/sockfs.go
@@ -73,26 +73,14 @@ func (i *inode) Open(ctx context.Context, rp *vfs.ResolvingPath, vfsd *vfs.Dentr
return nil, syserror.ENXIO
}
-// InitSocket initializes a socket FileDescription, with a corresponding
-// Dentry in mnt.
-//
-// fd should be the FileDescription associated with socketImpl, i.e. its first
-// field. mnt should be the global socket mount, Kernel.socketMount.
-func InitSocket(socketImpl vfs.FileDescriptionImpl, fd *vfs.FileDescription, mnt *vfs.Mount, creds *auth.Credentials) error {
- fsimpl := mnt.Filesystem().Impl()
- fs := fsimpl.(*kernfs.Filesystem)
-
+// NewDentry constructs and returns a sockfs dentry.
+func NewDentry(creds *auth.Credentials, ino uint64) *vfs.Dentry {
// File mode matches net/socket.c:sock_alloc.
filemode := linux.FileMode(linux.S_IFSOCK | 0600)
i := &inode{}
- i.Init(creds, fs.NextIno(), filemode)
+ i.Init(creds, ino, filemode)
d := &kernfs.Dentry{}
d.Init(i)
-
- opts := &vfs.FileDescriptionOptions{UseDentryMetadata: true}
- if err := fd.Init(socketImpl, linux.O_RDWR, mnt, d.VFSDentry(), opts); err != nil {
- return err
- }
- return nil
+ return d.VFSDentry()
}