Fix reading of setxattr name

This commit is contained in:
Antonio SJ Musumeci 2022-12-06 23:26:08 -05:00
parent ac1f4b4d52
commit d14427ad9e
3 changed files with 10 additions and 1 deletions

View File

@ -126,6 +126,7 @@ struct fuse_file_info_t
#define FUSE_CAP_POSIX_ACL (1 << 19)
#define FUSE_CAP_CACHE_SYMLINKS (1 << 20)
#define FUSE_CAP_MAX_PAGES (1 << 21)
#define FUSE_CAP_SETXATTR_EXT (1 << 22)
/**
* Ioctl flags

View File

@ -2788,7 +2788,11 @@ fuse_lib_setxattr(fuse_req_t req,
struct fuse_setxattr_in *arg;
arg = fuse_hdr_arg(hdr_);
name = PARAM(arg);
if((req->f->conn.capable & FUSE_SETXATTR_EXT) && (req->f->conn.want & FUSE_SETXATTR_EXT))
name = PARAM(arg);
else
name = (((char*)arg) + FUSE_COMPAT_SETXATTR_IN_SIZE);
value = (name + strlen(name) + 1);
f = req_fuse_prepare(req);

View File

@ -1432,6 +1432,8 @@ do_init(fuse_req_t req,
f->conn.capable |= FUSE_CAP_READDIR_PLUS;
if (arg->flags & FUSE_READDIRPLUS_AUTO)
f->conn.capable |= FUSE_CAP_READDIR_PLUS_AUTO;
if (arg->flags & FUSE_SETXATTR_EXT)
f->conn.capable |= FUSE_CAP_SETXATTR_EXT;
}
else
{
@ -1519,6 +1521,8 @@ do_init(fuse_req_t req,
outarg.flags |= FUSE_DO_READDIRPLUS;
if (f->conn.want & FUSE_CAP_READDIR_PLUS_AUTO)
outarg.flags |= FUSE_READDIRPLUS_AUTO;
if (f->conn.want & FUSE_CAP_SETXATTR_EXT)
outarg.flags |= FUSE_SETXATTR_EXT;
outarg.max_readahead = f->conn.max_readahead;
outarg.max_write = f->conn.max_write;