Skip to content

Commit

Permalink
fuse: move option checking into fuse_fill_super()
Browse files Browse the repository at this point in the history
Checking whether the "fd=", "rootmode=", "user_id=" and "group_id=" mount
options are present can be moved from fuse_get_tree() into
fuse_fill_super() where the value of the options are consumed.

This relaxes semantics of reusing a fuse blockdev mount using the device
name.  Before this patch presence of these options were enforced but values
ignored, after this patch these options are completely ignored in this
case.

Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
  • Loading branch information
Miklos Szeredi committed Aug 4, 2021
1 parent 84c2150 commit badc741
Showing 1 changed file with 6 additions and 7 deletions.
13 changes: 6 additions & 7 deletions fs/fuse/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -1514,6 +1514,10 @@ static int fuse_fill_super(struct super_block *sb, struct fs_context *fsc)
struct fuse_conn *fc;
struct fuse_mount *fm;

if (!ctx->fd_present || !ctx->rootmode_present ||
!ctx->user_id_present || !ctx->group_id_present)
return -EINVAL;

err = -EINVAL;
file = fget(ctx->fd);
if (!file)
Expand Down Expand Up @@ -1570,14 +1574,9 @@ static int fuse_get_tree(struct fs_context *fsc)
{
struct fuse_fs_context *ctx = fsc->fs_private;

if (!ctx->fd_present || !ctx->rootmode_present ||
!ctx->user_id_present || !ctx->group_id_present)
return -EINVAL;

#ifdef CONFIG_BLOCK
if (ctx->is_bdev)
if (IS_ENABLED(CONFIG_BLOCK) && ctx->is_bdev) {
return get_tree_bdev(fsc, fuse_fill_super);
#endif
}

return get_tree_nodev(fsc, fuse_fill_super);
}
Expand Down

0 comments on commit badc741

Please sign in to comment.