fuse: support idmapped ->set_acl
authorAlexander Mikhalitsyn <aleksandr.mikhalitsyn@canonical.com>
Tue, 3 Sep 2024 15:16:21 +0000 (17:16 +0200)
committerMiklos Szeredi <mszeredi@redhat.com>
Wed, 4 Sep 2024 14:51:11 +0000 (16:51 +0200)
It's just a matter of adjusting a permission check condition
for S_ISGID flag. All the rest is already handled in the generic
VFS code.

Notice that this permission check is the analog of what
we have in posix_acl_update_mode() generic helper, but
fuse doesn't use this helper as on the kernel side we don't
care about ensuring that POSIX ACL and CHMOD permissions are in sync
as it is a responsibility of a userspace daemon to handle that.
For the same reason we don't have a calls to posix_acl_chmod(),
while most of other filesystem do.

Signed-off-by: Alexander Mikhalitsyn <aleksandr.mikhalitsyn@canonical.com>
Reviewed-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
fs/fuse/acl.c

index 897d813c5e929effd41d62ac60c2e38b161cfab1..8f484b105f13ab7f7fca628e8fba6d2440d06900 100644 (file)
@@ -144,8 +144,8 @@ int fuse_set_acl(struct mnt_idmap *idmap, struct dentry *dentry,
                 * be stripped.
                 */
                if (fc->posix_acl &&
-                   !in_group_or_capable(&nop_mnt_idmap, inode,
-                                        i_gid_into_vfsgid(&nop_mnt_idmap, inode)))
+                   !in_group_or_capable(idmap, inode,
+                                        i_gid_into_vfsgid(idmap, inode)))
                        extra_flags |= FUSE_SETXATTR_ACL_KILL_SGID;
 
                ret = fuse_setxattr(inode, name, value, size, 0, extra_flags);