From 4a842836e560322bb3944b59ff43b9d60cc0f867 Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Fri, 17 May 2019 13:46:18 -0700 Subject: Return EPERM for mknod This more directly matches what Linux does with unsupported nodes. PiperOrigin-RevId: 248780425 Change-Id: I17f3dd0b244f6dc4eb00e2e42344851b8367fbec --- pkg/sentry/fs/gofer/path.go | 4 ++-- pkg/sentry/fs/host/inode.go | 2 +- runsc/fsgofer/fsgofer.go | 5 ++++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/pkg/sentry/fs/gofer/path.go b/pkg/sentry/fs/gofer/path.go index babfa4560..148e2f038 100644 --- a/pkg/sentry/fs/gofer/path.go +++ b/pkg/sentry/fs/gofer/path.go @@ -281,9 +281,9 @@ func (i *inodeOperations) Bind(ctx context.Context, dir *fs.Inode, name string, } // CreateFifo implements fs.InodeOperations.CreateFifo. Gofer nodes do not support the -// creation of fifos and always returns EOPNOTSUPP. +// creation of fifos and always returns EPERM. func (*inodeOperations) CreateFifo(context.Context, *fs.Inode, string, fs.FilePermissions) error { - return syscall.EOPNOTSUPP + return syscall.EPERM } // Remove implements InodeOperations.Remove. diff --git a/pkg/sentry/fs/host/inode.go b/pkg/sentry/fs/host/inode.go index ebf2154bc..7a230e426 100644 --- a/pkg/sentry/fs/host/inode.go +++ b/pkg/sentry/fs/host/inode.go @@ -287,7 +287,7 @@ func (*inodeOperations) CreateHardLink(context.Context, *fs.Inode, *fs.Inode, st // CreateFifo implements fs.InodeOperations.CreateFifo. func (*inodeOperations) CreateFifo(context.Context, *fs.Inode, string, fs.FilePermissions) error { - return syserror.EOPNOTSUPP + return syserror.EPERM } // Remove implements fs.InodeOperations.Remove. diff --git a/runsc/fsgofer/fsgofer.go b/runsc/fsgofer/fsgofer.go index b185015b6..2cf50290a 100644 --- a/runsc/fsgofer/fsgofer.go +++ b/runsc/fsgofer/fsgofer.go @@ -860,7 +860,10 @@ func (l *localFile) Link(target p9.File, newName string) error { // // Not implemented. func (*localFile) Mknod(_ string, _ p9.FileMode, _ uint32, _ uint32, _ p9.UID, _ p9.GID) (p9.QID, error) { - return p9.QID{}, syscall.ENOSYS + // From mknod(2) man page: + // "EPERM: [...] if the filesystem containing pathname does not support + // the type of node requested." + return p9.QID{}, syscall.EPERM } // UnlinkAt implements p9.File. -- cgit v1.2.3