summaryrefslogtreecommitdiffhomepage
path: root/pkg/sentry/vfs/syscalls.go
diff options
context:
space:
mode:
authorgVisor bot <gvisor-bot@google.com>2019-10-19 18:53:34 +0000
committergVisor bot <gvisor-bot@google.com>2019-10-19 18:53:34 +0000
commit17a63aa1580ad13c7f3c441a414d331f3c6be52f (patch)
tree30766e645a593bf5b29778b3262f9c53a98bb0af /pkg/sentry/vfs/syscalls.go
parent5b34eb4ff9d394ec8e68bca617a9ced217898436 (diff)
parent652f7b1d0fef6f522baaed091d4820a48014092c (diff)
Merge release-20190806.1-294-g652f7b1 (automated)
Diffstat (limited to 'pkg/sentry/vfs/syscalls.go')
-rwxr-xr-xpkg/sentry/vfs/syscalls.go22
1 files changed, 20 insertions, 2 deletions
diff --git a/pkg/sentry/vfs/syscalls.go b/pkg/sentry/vfs/syscalls.go
index 23f2b9e08..abde0feaa 100755
--- a/pkg/sentry/vfs/syscalls.go
+++ b/pkg/sentry/vfs/syscalls.go
@@ -96,6 +96,26 @@ func (vfs *VirtualFilesystem) MkdirAt(ctx context.Context, creds *auth.Credentia
}
}
+// MknodAt creates a file of the given mode at the given path. It returns an
+// error from the syserror package.
+func (vfs *VirtualFilesystem) MknodAt(ctx context.Context, creds *auth.Credentials, pop *PathOperation, opts *MknodOptions) error {
+ rp, err := vfs.getResolvingPath(creds, pop)
+ if err != nil {
+ return nil
+ }
+ for {
+ if err = rp.mount.fs.impl.MknodAt(ctx, rp, *opts); err == nil {
+ vfs.putResolvingPath(rp)
+ return nil
+ }
+ // Handle mount traversals.
+ if !rp.handleError(err) {
+ vfs.putResolvingPath(rp)
+ return err
+ }
+ }
+}
+
// OpenAt returns a FileDescription providing access to the file at the given
// path. A reference is taken on the returned FileDescription.
func (vfs *VirtualFilesystem) OpenAt(ctx context.Context, creds *auth.Credentials, pop *PathOperation, opts *OpenOptions) (*FileDescription, error) {
@@ -198,8 +218,6 @@ func (fd *FileDescription) SetStatusFlags(ctx context.Context, flags uint32) err
//
// - VFS.LinkAt()
//
-// - VFS.MknodAt()
-//
// - VFS.ReadlinkAt()
//
// - VFS.RenameAt()