From e0fa290c048c4708c4e9530a8763a1d55d1f919a Mon Sep 17 00:00:00 2001 From: Al Viro Date: Thu, 17 Jul 2008 09:19:08 -0400 Subject: [PATCH] --- yaml --- r: 106363 b: refs/heads/master c: a110343f0d6d41f68b7cf8c00b57a3172c67f816 h: refs/heads/master i: 106361: a906d3544053caaf4e28d38772ce2a99d794de70 106359: 3073a3397f815c6127419a224b98ba3f9b6b1288 v: v3 --- [refs] | 2 +- trunk/fs/fuse/dir.c | 2 +- trunk/fs/namei.c | 2 -- trunk/fs/open.c | 10 +++++----- trunk/include/linux/fs.h | 3 +-- trunk/include/linux/namei.h | 1 - 6 files changed, 8 insertions(+), 12 deletions(-) diff --git a/[refs] b/[refs] index 07519e82ebe9..937bd1153bce 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7f2da1e7d0330395e5e9e350b879b98a1ea495df +refs/heads/master: a110343f0d6d41f68b7cf8c00b57a3172c67f816 diff --git a/trunk/fs/fuse/dir.c b/trunk/fs/fuse/dir.c index 48a7934cb950..fd03330cadeb 100644 --- a/trunk/fs/fuse/dir.c +++ b/trunk/fs/fuse/dir.c @@ -962,7 +962,7 @@ static int fuse_permission(struct inode *inode, int mask) exist. So if permissions are revoked this won't be noticed immediately, only after the attribute timeout has expired */ - } else if (mask & (MAY_ACCESS | MAY_CHDIR)) { + } else if (mask & MAY_ACCESS) { err = fuse_access(inode, mask); } else if ((mask & MAY_EXEC) && S_ISREG(inode->i_mode)) { if (!(inode->i_mode & S_IXUGO)) { diff --git a/trunk/fs/namei.c b/trunk/fs/namei.c index 095818089ac1..33dcaf025c49 100644 --- a/trunk/fs/namei.c +++ b/trunk/fs/namei.c @@ -265,8 +265,6 @@ int permission(struct inode *inode, int mask, struct nameidata *nd) if (inode->i_op && inode->i_op->permission) { int extra = 0; if (nd) { - if (nd->flags & LOOKUP_ACCESS) - extra |= MAY_ACCESS; if (nd->flags & LOOKUP_OPEN) extra |= MAY_OPEN; } diff --git a/trunk/fs/open.c b/trunk/fs/open.c index d3a2a00f52dc..3317e1909b2c 100644 --- a/trunk/fs/open.c +++ b/trunk/fs/open.c @@ -457,11 +457,11 @@ asmlinkage long sys_faccessat(int dfd, const char __user *filename, int mode) old_cap = cap_set_effective(current->cap_permitted); } - res = __user_walk_fd(dfd, filename, LOOKUP_FOLLOW|LOOKUP_ACCESS, &nd); + res = __user_walk_fd(dfd, filename, LOOKUP_FOLLOW, &nd); if (res) goto out; - res = vfs_permission(&nd, mode); + res = vfs_permission(&nd, mode | MAY_ACCESS); /* SuS v2 requires we report a read only fs too */ if(res || !(mode & S_IWOTH) || special_file(nd.path.dentry->d_inode->i_mode)) @@ -505,7 +505,7 @@ asmlinkage long sys_chdir(const char __user * filename) if (error) goto out; - error = vfs_permission(&nd, MAY_EXEC | MAY_CHDIR); + error = vfs_permission(&nd, MAY_EXEC | MAY_ACCESS); if (error) goto dput_and_out; @@ -534,7 +534,7 @@ asmlinkage long sys_fchdir(unsigned int fd) if (!S_ISDIR(inode->i_mode)) goto out_putf; - error = file_permission(file, MAY_EXEC); + error = file_permission(file, MAY_EXEC | MAY_ACCESS); if (!error) set_fs_pwd(current->fs, &file->f_path); out_putf: @@ -552,7 +552,7 @@ asmlinkage long sys_chroot(const char __user * filename) if (error) goto out; - error = vfs_permission(&nd, MAY_EXEC); + error = vfs_permission(&nd, MAY_EXEC | MAY_ACCESS); if (error) goto dput_and_out; diff --git a/trunk/include/linux/fs.h b/trunk/include/linux/fs.h index 25998e803fc2..d8721e818b45 100644 --- a/trunk/include/linux/fs.h +++ b/trunk/include/linux/fs.h @@ -61,8 +61,7 @@ extern int dir_notify_enable; #define MAY_READ 4 #define MAY_APPEND 8 #define MAY_ACCESS 16 -#define MAY_CHDIR 32 -#define MAY_OPEN 64 +#define MAY_OPEN 32 #define FMODE_READ 1 #define FMODE_WRITE 2 diff --git a/trunk/include/linux/namei.h b/trunk/include/linux/namei.h index 768773d57857..60e35a02f6cb 100644 --- a/trunk/include/linux/namei.h +++ b/trunk/include/linux/namei.h @@ -53,7 +53,6 @@ enum {LAST_NORM, LAST_ROOT, LAST_DOT, LAST_DOTDOT, LAST_BIND}; */ #define LOOKUP_OPEN (0x0100) #define LOOKUP_CREATE (0x0200) -#define LOOKUP_ACCESS (0x0400) extern int __user_walk(const char __user *, unsigned, struct nameidata *); extern int __user_walk_fd(int dfd, const char __user *, unsigned, struct nameidata *);