[Virtio-fs] [PATCH] virtiofsd: Open fd O_RDONLY in setxattr/removexattr

Eryu Guan eguan at linux.alibaba.com
Thu Jan 9 02:23:03 UTC 2020


On Wed, Jan 08, 2020 at 03:24:22PM -0500, Vivek Goyal wrote:
> Do not open fd O_RDWR as it will fail for directories with EISDIR. This
> code can be called both for regular files as well as directories.
> 
> I noticed this when I tried "setfattr -n user.foo -v test <dir>" inside
> the guest and got EISDIR.
> 
> To write xattr, we don't have to open fd with write permissions. Looks
> like kernel will do permission checks on inode.
> 
> Signed-off-by: Vivek Goyal <vgoyal at redhat.com>

Looks good to me.

Reviewed-by: Eryu Guan <eguan at linux.alibaba.com>

> ---
>  contrib/virtiofsd/passthrough_ll.c |    4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> Index: qemu/contrib/virtiofsd/passthrough_ll.c
> ===================================================================
> --- qemu.orig/contrib/virtiofsd/passthrough_ll.c	2020-01-08 15:01:03.821980889 -0500
> +++ qemu/contrib/virtiofsd/passthrough_ll.c	2020-01-08 15:05:15.209384352 -0500
> @@ -2424,7 +2424,7 @@ static void lo_setxattr(fuse_req_t req,
>  	}
>  
>  	sprintf(procname, "%i", inode->fd);
> -	fd = openat(lo->proc_self_fd, procname, O_RDWR);
> +	fd = openat(lo->proc_self_fd, procname, O_RDONLY);
>  	if (fd < 0) {
>  		saverr = errno;
>  		goto out;
> @@ -2473,7 +2473,7 @@ static void lo_removexattr(fuse_req_t re
>  	}
>  
>  	sprintf(procname, "%i", inode->fd);
> -	fd = openat(lo->proc_self_fd, procname, O_RDWR);
> +	fd = openat(lo->proc_self_fd, procname, O_RDONLY);
>  	if (fd < 0) {
>  		saverr = errno;
>  		goto out;
> 
> _______________________________________________
> Virtio-fs mailing list
> Virtio-fs at redhat.com
> https://www.redhat.com/mailman/listinfo/virtio-fs





More information about the Virtio-fs mailing list