mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-07 22:42:04 +00:00
fs: fold __inode_permission() into inode_permission()
Since commit 9c630ebefe
("ovl: simplify permission checking"),
overlayfs doesn't call __inode_permission() anymore, which leaves no
users other than inode_permission(). So just fold it back into
inode_permission().
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
e1fc742e14
commit
4bfd054ae1
71
fs/namei.c
71
fs/namei.c
@ -390,50 +390,6 @@ static inline int do_inode_permission(struct inode *inode, int mask)
|
|||||||
return generic_permission(inode, mask);
|
return generic_permission(inode, mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* __inode_permission - Check for access rights to a given inode
|
|
||||||
* @inode: Inode to check permission on
|
|
||||||
* @mask: Right to check for (%MAY_READ, %MAY_WRITE, %MAY_EXEC)
|
|
||||||
*
|
|
||||||
* Check for read/write/execute permissions on an inode.
|
|
||||||
*
|
|
||||||
* When checking for MAY_APPEND, MAY_WRITE must also be set in @mask.
|
|
||||||
*
|
|
||||||
* This does not check for a read-only file system. You probably want
|
|
||||||
* inode_permission().
|
|
||||||
*/
|
|
||||||
int __inode_permission(struct inode *inode, int mask)
|
|
||||||
{
|
|
||||||
int retval;
|
|
||||||
|
|
||||||
if (unlikely(mask & MAY_WRITE)) {
|
|
||||||
/*
|
|
||||||
* Nobody gets write access to an immutable file.
|
|
||||||
*/
|
|
||||||
if (IS_IMMUTABLE(inode))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Updating mtime will likely cause i_uid and i_gid to be
|
|
||||||
* written back improperly if their true value is unknown
|
|
||||||
* to the vfs.
|
|
||||||
*/
|
|
||||||
if (HAS_UNMAPPED_ID(inode))
|
|
||||||
return -EACCES;
|
|
||||||
}
|
|
||||||
|
|
||||||
retval = do_inode_permission(inode, mask);
|
|
||||||
if (retval)
|
|
||||||
return retval;
|
|
||||||
|
|
||||||
retval = devcgroup_inode_permission(inode, mask);
|
|
||||||
if (retval)
|
|
||||||
return retval;
|
|
||||||
|
|
||||||
return security_inode_permission(inode, mask);
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(__inode_permission);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sb_permission - Check superblock-level permissions
|
* sb_permission - Check superblock-level permissions
|
||||||
* @sb: Superblock of inode to check permission on
|
* @sb: Superblock of inode to check permission on
|
||||||
@ -472,7 +428,32 @@ int inode_permission(struct inode *inode, int mask)
|
|||||||
retval = sb_permission(inode->i_sb, inode, mask);
|
retval = sb_permission(inode->i_sb, inode, mask);
|
||||||
if (retval)
|
if (retval)
|
||||||
return retval;
|
return retval;
|
||||||
return __inode_permission(inode, mask);
|
|
||||||
|
if (unlikely(mask & MAY_WRITE)) {
|
||||||
|
/*
|
||||||
|
* Nobody gets write access to an immutable file.
|
||||||
|
*/
|
||||||
|
if (IS_IMMUTABLE(inode))
|
||||||
|
return -EPERM;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Updating mtime will likely cause i_uid and i_gid to be
|
||||||
|
* written back improperly if their true value is unknown
|
||||||
|
* to the vfs.
|
||||||
|
*/
|
||||||
|
if (HAS_UNMAPPED_ID(inode))
|
||||||
|
return -EACCES;
|
||||||
|
}
|
||||||
|
|
||||||
|
retval = do_inode_permission(inode, mask);
|
||||||
|
if (retval)
|
||||||
|
return retval;
|
||||||
|
|
||||||
|
retval = devcgroup_inode_permission(inode, mask);
|
||||||
|
if (retval)
|
||||||
|
return retval;
|
||||||
|
|
||||||
|
return security_inode_permission(inode, mask);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(inode_permission);
|
EXPORT_SYMBOL(inode_permission);
|
||||||
|
|
||||||
|
@ -2699,7 +2699,6 @@ extern sector_t bmap(struct inode *, sector_t);
|
|||||||
#endif
|
#endif
|
||||||
extern int notify_change(struct dentry *, struct iattr *, struct inode **);
|
extern int notify_change(struct dentry *, struct iattr *, struct inode **);
|
||||||
extern int inode_permission(struct inode *, int);
|
extern int inode_permission(struct inode *, int);
|
||||||
extern int __inode_permission(struct inode *, int);
|
|
||||||
extern int generic_permission(struct inode *, int);
|
extern int generic_permission(struct inode *, int);
|
||||||
extern int __check_sticky(struct inode *dir, struct inode *inode);
|
extern int __check_sticky(struct inode *dir, struct inode *inode);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user