diff options
author | gVisor bot <gvisor-bot@google.com> | 2019-10-19 18:53:34 +0000 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2019-10-19 18:53:34 +0000 |
commit | 17a63aa1580ad13c7f3c441a414d331f3c6be52f (patch) | |
tree | 30766e645a593bf5b29778b3262f9c53a98bb0af /pkg/sentry/vfs/syscalls.go | |
parent | 5b34eb4ff9d394ec8e68bca617a9ced217898436 (diff) | |
parent | 652f7b1d0fef6f522baaed091d4820a48014092c (diff) |
Merge release-20190806.1-294-g652f7b1 (automated)
Diffstat (limited to 'pkg/sentry/vfs/syscalls.go')
-rwxr-xr-x | pkg/sentry/vfs/syscalls.go | 22 |
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() |