[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 13/20] virtiofsd: Add support for extended setxattr
From: |
Dr. David Alan Gilbert (git) |
Subject: |
[PULL 13/20] virtiofsd: Add support for extended setxattr |
Date: |
Thu, 1 Jul 2021 15:15:38 +0100 |
From: Vivek Goyal <vgoyal@redhat.com>
Add the bits to enable support for setxattr_ext if fuse offers it. Do not
enable it by default yet. Let passthrough_ll opt-in. Enabling it by deafult
kind of automatically means that you are taking responsibility of clearing
SGID if ACL is set.
Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
Message-Id: <20210622150852.1507204-4-vgoyal@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Fixed up double def in fuse_common.h
---
tools/virtiofsd/fuse_lowlevel.c | 11 ++++++++++-
tools/virtiofsd/fuse_lowlevel.h | 3 ++-
tools/virtiofsd/passthrough_ll.c | 3 ++-
3 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/tools/virtiofsd/fuse_lowlevel.c b/tools/virtiofsd/fuse_lowlevel.c
index 2028677907..e4679c73ab 100644
--- a/tools/virtiofsd/fuse_lowlevel.c
+++ b/tools/virtiofsd/fuse_lowlevel.c
@@ -1445,7 +1445,9 @@ static void do_setxattr(fuse_req_t req, fuse_ino_t nodeid,
}
if (req->se->op.setxattr) {
- req->se->op.setxattr(req, nodeid, name, value, arg->size, arg->flags);
+ uint32_t setxattr_flags = setxattr_ext ? arg->setxattr_flags : 0;
+ req->se->op.setxattr(req, nodeid, name, value, arg->size, arg->flags,
+ setxattr_flags);
} else {
fuse_reply_err(req, ENOSYS);
}
@@ -1992,6 +1994,9 @@ static void do_init(fuse_req_t req, fuse_ino_t nodeid,
if (arg->flags & FUSE_HANDLE_KILLPRIV_V2) {
se->conn.capable |= FUSE_CAP_HANDLE_KILLPRIV_V2;
}
+ if (arg->flags & FUSE_SETXATTR_EXT) {
+ se->conn.capable |= FUSE_CAP_SETXATTR_EXT;
+ }
#ifdef HAVE_SPLICE
#ifdef HAVE_VMSPLICE
se->conn.capable |= FUSE_CAP_SPLICE_WRITE | FUSE_CAP_SPLICE_MOVE;
@@ -2127,6 +2132,10 @@ static void do_init(fuse_req_t req, fuse_ino_t nodeid,
outarg.flags |= FUSE_HANDLE_KILLPRIV_V2;
}
+ if (se->conn.want & FUSE_CAP_SETXATTR_EXT) {
+ outarg.flags |= FUSE_SETXATTR_EXT;
+ }
+
fuse_log(FUSE_LOG_DEBUG, " INIT: %u.%u\n", outarg.major, outarg.minor);
fuse_log(FUSE_LOG_DEBUG, " flags=0x%08x\n", outarg.flags);
fuse_log(FUSE_LOG_DEBUG, " max_readahead=0x%08x\n",
outarg.max_readahead);
diff --git a/tools/virtiofsd/fuse_lowlevel.h b/tools/virtiofsd/fuse_lowlevel.h
index 3bf786b034..4b4e8c9724 100644
--- a/tools/virtiofsd/fuse_lowlevel.h
+++ b/tools/virtiofsd/fuse_lowlevel.h
@@ -798,7 +798,8 @@ struct fuse_lowlevel_ops {
* fuse_reply_err
*/
void (*setxattr)(fuse_req_t req, fuse_ino_t ino, const char *name,
- const char *value, size_t size, int flags);
+ const char *value, size_t size, int flags,
+ uint32_t setxattr_flags);
/**
* Get an extended attribute
diff --git a/tools/virtiofsd/passthrough_ll.c b/tools/virtiofsd/passthrough_ll.c
index ccbda98c5a..4dec087bd4 100644
--- a/tools/virtiofsd/passthrough_ll.c
+++ b/tools/virtiofsd/passthrough_ll.c
@@ -2955,7 +2955,8 @@ out:
}
static void lo_setxattr(fuse_req_t req, fuse_ino_t ino, const char *in_name,
- const char *value, size_t size, int flags)
+ const char *value, size_t size, int flags,
+ uint32_t extra_flags)
{
char procname[64];
const char *name;
--
2.31.1
- [PULL 03/20] migration: fix the memory overwriting risk in add_to_iovec, (continued)
- [PULL 03/20] migration: fix the memory overwriting risk in add_to_iovec, Dr. David Alan Gilbert (git), 2021/07/01
- [PULL 04/20] migration: Move yank outside qemu_start_incoming_migration(), Dr. David Alan Gilbert (git), 2021/07/01
- [PULL 05/20] migration: Allow reset of postcopy_recover_triggered when failed, Dr. David Alan Gilbert (git), 2021/07/01
- [PULL 06/20] migration: move wait-unplug loop to its own function, Dr. David Alan Gilbert (git), 2021/07/01
- [PULL 07/20] migration: failover: continue to wait card unplug on error, Dr. David Alan Gilbert (git), 2021/07/01
- [PULL 08/20] virtiofsd: use GDateTime for formatting timestamp for debug messages, Dr. David Alan Gilbert (git), 2021/07/01
- [PULL 09/20] docs: describe the security considerations with virtiofsd xattr mapping, Dr. David Alan Gilbert (git), 2021/07/01
- [PULL 10/20] virtiofsd: Don't allow file creation with FUSE_OPEN, Dr. David Alan Gilbert (git), 2021/07/01
- [PULL 11/20] virtiofsd: Fix fuse setxattr() API change issue, Dr. David Alan Gilbert (git), 2021/07/01
- [PULL 12/20] virtiofsd: Fix xattr operations overwriting errno, Dr. David Alan Gilbert (git), 2021/07/01
- [PULL 13/20] virtiofsd: Add support for extended setxattr,
Dr. David Alan Gilbert (git) <=
- [PULL 14/20] virtiofsd: Add umask to seccom allow list, Dr. David Alan Gilbert (git), 2021/07/01
- [PULL 15/20] virtiofsd: Add capability to change/restore umask, Dr. David Alan Gilbert (git), 2021/07/01
- [PULL 16/20] virtiofsd: Switch creds, drop FSETID for system.posix_acl_access xattr, Dr. David Alan Gilbert (git), 2021/07/01
- [PULL 17/20] virtiofsd: Add an option to enable/disable posix acls, Dr. David Alan Gilbert (git), 2021/07/01
- [PULL 18/20] tests/migration: parse the thread-id key of CpuInfoFast, Dr. David Alan Gilbert (git), 2021/07/01
- [PULL 19/20] tests/migration: fix "downtime_limit" type when "migrate-set-parameters", Dr. David Alan Gilbert (git), 2021/07/01
- [PULL 20/20] migration/rdma: Use error_report to suppress errno message, Dr. David Alan Gilbert (git), 2021/07/01
- Re: [PULL 00/20] migration queue, Peter Maydell, 2021/07/05