Skip to content

Commit

Permalink
vfs: move MAY_EXEC check from __lookup_hash()
Browse files Browse the repository at this point in the history
The only caller of __lookup_hash() that needs the exec permission check on
parent is lookup_one_len().

All lookup_hash() callers already checked permission in LOOKUP_PARENT walk.

Signed-off-by: Miklos Szeredi <[email protected]>
Signed-off-by: Al Viro <[email protected]>
  • Loading branch information
Miklos Szeredi authored and Al Viro committed Mar 31, 2012
1 parent 3637c05 commit cda309d
Showing 1 changed file with 5 additions and 6 deletions.
11 changes: 5 additions & 6 deletions fs/namei.c
Original file line number Diff line number Diff line change
Expand Up @@ -1849,13 +1849,7 @@ int vfs_path_lookup(struct dentry *dentry, struct vfsmount *mnt,
static struct dentry *__lookup_hash(struct qstr *name,
struct dentry *base, struct nameidata *nd)
{
struct inode *inode = base->d_inode;
struct dentry *dentry;
int err;

err = inode_permission(inode, MAY_EXEC);
if (err)
return ERR_PTR(err);

/*
* Don't bother with __d_lookup: callers are for creat as
Expand Down Expand Up @@ -1922,6 +1916,7 @@ struct dentry *lookup_one_len(const char *name, struct dentry *base, int len)
{
struct qstr this;
unsigned int c;
int err;

WARN_ON_ONCE(!mutex_is_locked(&base->d_inode->i_mutex));

Expand All @@ -1946,6 +1941,10 @@ struct dentry *lookup_one_len(const char *name, struct dentry *base, int len)
return ERR_PTR(err);
}

err = inode_permission(base->d_inode, MAY_EXEC);
if (err)
return ERR_PTR(err);

return __lookup_hash(&this, base, NULL);
}

Expand Down

0 comments on commit cda309d

Please sign in to comment.