]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
xattr: switch xattr_permission() to switch statement
authorChristian Brauner <brauner@kernel.org>
Mon, 16 Feb 2026 13:32:04 +0000 (14:32 +0100)
committerChristian Brauner <brauner@kernel.org>
Mon, 2 Mar 2026 10:06:42 +0000 (11:06 +0100)
Simplify the codeflow by using a switch statement that switches on
S_IFMT.

Link: https://patch.msgid.link/20260216-work-xattr-socket-v1-8-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>
fs/xattr.c

index c4db8663c32e07a7d6ae32dabe84c095c8c4eb37..328ed7558dfc8b66c89abcae057ca695a373c8f1 100644 (file)
@@ -152,12 +152,20 @@ xattr_permission(struct mnt_idmap *idmap, struct inode *inode,
         * privileged users can write attributes.
         */
        if (!strncmp(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN)) {
-               if (!S_ISREG(inode->i_mode) && !S_ISDIR(inode->i_mode))
-                       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))
+               switch (inode->i_mode & S_IFMT) {
+               case S_IFREG:
+                       break;
+               case S_IFDIR:
+                       if (!(inode->i_mode & S_ISVTX))
+                               break;
+                       if (!(mask & MAY_WRITE))
+                               break;
+                       if (inode_owner_or_capable(idmap, inode))
+                               break;
                        return -EPERM;
+               default:
+                       return xattr_permission_error(mask);
+               }
        }
 
        return inode_permission(idmap, inode, mask);