mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 09:04:39 +02:00
xattr: add xattr_permission_error()
Stop repeating the ?: in multiple places and use a simple helper for this. Link: https://patch.msgid.link/20260216-work-xattr-socket-v1-7-c2efa4f74cb7@kernel.org Acked-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Jan Kara <jack@suse.cz> Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
25ab7b6f34
commit
3ec90ae54d
11
fs/xattr.c
11
fs/xattr.c
|
|
@ -106,6 +106,13 @@ int may_write_xattr(struct mnt_idmap *idmap, struct inode *inode)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static inline int xattr_permission_error(int mask)
|
||||
{
|
||||
if (mask & MAY_WRITE)
|
||||
return -EPERM;
|
||||
return -ENODATA;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check permissions for extended attribute access. This is a bit complicated
|
||||
* because different namespaces have very different rules.
|
||||
|
|
@ -135,7 +142,7 @@ xattr_permission(struct mnt_idmap *idmap, struct inode *inode,
|
|||
*/
|
||||
if (!strncmp(name, XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN)) {
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
return (mask & MAY_WRITE) ? -EPERM : -ENODATA;
|
||||
return xattr_permission_error(mask);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -146,7 +153,7 @@ xattr_permission(struct mnt_idmap *idmap, struct inode *inode,
|
|||
*/
|
||||
if (!strncmp(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN)) {
|
||||
if (!S_ISREG(inode->i_mode) && !S_ISDIR(inode->i_mode))
|
||||
return (mask & MAY_WRITE) ? -EPERM : -ENODATA;
|
||||
return xattr_permission_error(mask);
|
||||
if (S_ISDIR(inode->i_mode) && (inode->i_mode & S_ISVTX) &&
|
||||
(mask & MAY_WRITE) &&
|
||||
!inode_owner_or_capable(idmap, inode))
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user