fuse: support idmapped ->permission inode op
authorAlexander Mikhalitsyn <aleksandr.mikhalitsyn@canonical.com>
Tue, 3 Sep 2024 15:16:18 +0000 (17:16 +0200)
committerMiklos Szeredi <mszeredi@redhat.com>
Wed, 4 Sep 2024 14:49:58 +0000 (16:49 +0200)
We only cover the case when "default_permissions" flag
is used. A reason for that is that otherwise all the permission
checks are done in the userspace and we have to deal with
VFS idmapping in the userspace (which is bad), alternatively
we have to provide the userspace with idmapped req->in.h.uid/req->in.h.gid
which is also not align with VFS idmaps philosophy.

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/dir.c

index 2bc3ae40619aef7ecd96d54cc5d1651390bbf8e7..70ed1c47d7cea1ccb6b27704aad47cbad85575f4 100644 (file)
@@ -1545,7 +1545,7 @@ static int fuse_permission(struct mnt_idmap *idmap,
        }
 
        if (fc->default_permissions) {
-               err = generic_permission(&nop_mnt_idmap, inode, mask);
+               err = generic_permission(idmap, inode, mask);
 
                /* If permission is denied, try to refresh file
                   attributes.  This is also needed, because the root
@@ -1553,7 +1553,7 @@ static int fuse_permission(struct mnt_idmap *idmap,
                if (err == -EACCES && !refreshed) {
                        err = fuse_perm_getattr(inode, mask);
                        if (!err)
-                               err = generic_permission(&nop_mnt_idmap,
+                               err = generic_permission(idmap,
                                                         inode, mask);
                }