Re: [PATCH] fuse: reject a duplicate fd= mount option

Jingbo Xu <[email protected]>
Newsgroups dev.linux.lists.fuse-devel,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-kernel
Message-ID <[email protected]>

On 8/11/26 12:53 PM, Baokun Li wrote:
> fuse_opt_fd() stored the fuse device in ctx->fud and bumped its refcount
> unconditionally:
> 
>         ctx->fud = fuse_dev_grab(file);
> 
> If fd= is given twice (two fsconfig FSCONFIG_SET_FD calls), the second
> call overwrites ctx->fud and grabs the new device, while the reference
> taken on the first device is never released - a permanent refcount leak
> that pins the first fuse_dev until reboot.
> 
> Reject a second fd= outright.  ctx is zeroed on allocation, so a non-NULL
> ctx->fud reliably means the option was already processed.
> 
> Fixes: d42eb23b2ef9 ("fuse: don't require /dev/fuse fd to be kept open during mount")
> Signed-off-by: Baokun Li <[email protected]>

LGTM.

Reviewed-by: Jingbo Xu <[email protected]>


> ---
>  fs/fuse/inode.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c
> index 455c7feba057..2372e6ed333f 100644
> --- a/fs/fuse/inode.c
> +++ b/fs/fuse/inode.c
> @@ -791,6 +791,9 @@ static int fuse_opt_fd(struct fs_context *fsc, struct file *file)
>  {
>  	struct fuse_fs_context *ctx = fsc->fs_private;
>  
> +	if (ctx->fud)
> +		return invalfc(fsc, "Multiple fd specified");
> +
>  	if (file->f_op != &fuse_dev_operations)
>  		return invalfc(fsc, "fd is not a fuse device");
>  	/*

-- 
Thanks,
Jingbo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.