@@ -2397,7 +2397,7 @@ static void lo_setxattr(fuse_req_t req, fuse_ino_t ino, const char *name,
}
sprintf(procname, "%i", inode->fd);
- fd = openat(lo->proc_self_fd, procname, O_RDWR|O_NONBLOCK);
+ fd = openat(lo->proc_self_fd, procname, O_RDONLY|O_NONBLOCK);
if (fd < 0) {
saverr = errno;
goto out;
@@ -2446,7 +2446,7 @@ static void lo_removexattr(fuse_req_t req, fuse_ino_t ino, const char *name)
}
sprintf(procname, "%i", inode->fd);
- fd = openat(lo->proc_self_fd, procname, O_RDWR|O_NONBLOCK);
+ fd = openat(lo->proc_self_fd, procname, O_RDONLY|O_NONBLOCK);
if (fd < 0) {
saverr = errno;
goto out;
setxattr to directry fails because lo_setxattr (and lo_remove_xattr) tries to open any file with O_RDWR even if it is a directory. Since O_RDONLY is enough for the operation, change O_RDWR flag to O_RDONLY to fix the problem. Signed-off-by: Misono Tomohiro <misono.tomohiro@jp.fujitsu.com> --- contrib/virtiofsd/passthrough_ll.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)