diff options
author | Frank Filz <[email protected]> | 2009-05-18 17:41:40 -0400 |
---|---|---|
committer | Linus Torvalds <[email protected]> | 2009-05-18 20:11:12 -0700 |
commit | 7ee2cb7f32b299c2b06a31fde155457203e4b7dd (patch) | |
tree | ca8ef4015ad1e80325df02dcd4ecfe261e1a4f9f | |
parent | 363383277081ce831642b72df40932ee05ce40a2 (diff) |
nfs: Fix NFS v4 client handling of MAY_EXEC in nfs_permission.
The problem is that permission checking is skipped if atomic open is
possible, but when exec opens a file, it just opens it O_READONLY which
means EXEC permission will not be checked at that time.
This problem is observed by the following sequence (executed as root):
mount -t nfs4 server:/ /mnt4
echo "ls" >/mnt4/foo
chmod 744 /mnt4/foo
su guest -c "mnt4/foo"
Signed-off-by: Frank Filz <[email protected]>
Signed-off-by: Trond Myklebust <[email protected]>
Cc: [email protected]
Tested-by: Eugene Teo <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
-rw-r--r-- | fs/nfs/dir.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c index 370b190a09d1..89f98e9a024b 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c @@ -1943,7 +1943,8 @@ int nfs_permission(struct inode *inode, int mask) case S_IFREG: /* NFSv4 has atomic_open... */ if (nfs_server_capable(inode, NFS_CAP_ATOMIC_OPEN) - && (mask & MAY_OPEN)) + && (mask & MAY_OPEN) + && !(mask & MAY_EXEC)) goto out; break; case S_IFDIR: |