[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 5/5] 9p: xattr: Properly translate xattrcreate fl
From: |
Keno Fischer |
Subject: |
[Qemu-devel] [PATCH v3 5/5] 9p: xattr: Properly translate xattrcreate flags |
Date: |
Sat, 2 Jun 2018 17:29:39 -0400 |
As with unlinkat, these flags come from the client and need to
be translated to their host values. The protocol values happen
to match linux, but that need not be true in general.
Signed-off-by: Keno Fischer <address@hidden>
---
Changes since v2: New patch
hw/9pfs/9p.c | 17 +++++++++++++++--
hw/9pfs/9p.h | 4 ++++
2 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c
index c842ec5..eef289e 100644
--- a/hw/9pfs/9p.c
+++ b/hw/9pfs/9p.c
@@ -3327,7 +3327,7 @@ out_nofid:
static void coroutine_fn v9fs_xattrcreate(void *opaque)
{
- int flags;
+ int flags, rflags = 0;
int32_t fid;
uint64_t size;
ssize_t err = 0;
@@ -3344,6 +3344,19 @@ static void coroutine_fn v9fs_xattrcreate(void *opaque)
}
trace_v9fs_xattrcreate(pdu->tag, pdu->id, fid, name.data, size, flags);
+ if (flags & ~(P9_XATTR_CREATE | P9_XATTR_REPLACE)) {
+ err = -EINVAL;
+ goto out_nofid;
+ }
+
+ if (flags & P9_XATTR_CREATE) {
+ rflags |= XATTR_CREATE;
+ }
+
+ if (flags & P9_XATTR_REPLACE) {
+ rflags |= XATTR_REPLACE;
+ }
+
if (size > XATTR_SIZE_MAX) {
err = -E2BIG;
goto out_nofid;
@@ -3365,7 +3378,7 @@ static void coroutine_fn v9fs_xattrcreate(void *opaque)
xattr_fidp->fs.xattr.copied_len = 0;
xattr_fidp->fs.xattr.xattrwalk_fid = false;
xattr_fidp->fs.xattr.len = size;
- xattr_fidp->fs.xattr.flags = flags;
+ xattr_fidp->fs.xattr.flags = rflags;
v9fs_string_init(&xattr_fidp->fs.xattr.name);
v9fs_string_copy(&xattr_fidp->fs.xattr.name, &name);
xattr_fidp->fs.xattr.value = g_malloc0(size);
diff --git a/hw/9pfs/9p.h b/hw/9pfs/9p.h
index bad8ee7..6081b0d 100644
--- a/hw/9pfs/9p.h
+++ b/hw/9pfs/9p.h
@@ -169,6 +169,10 @@ typedef struct V9fsConf
char *fsdev_id;
} V9fsConf;
+/* 9p2000.L xattr flags (matches Linux values) */
+#define P9_XATTR_CREATE 1
+#define P9_XATTR_REPLACE 2
+
typedef struct V9fsXattr
{
uint64_t copied_len;
--
2.8.1
- [Qemu-devel] [PATCH v3 0/5] Prepratory cleanup for 9p darwin support, Keno Fischer, 2018/06/02
- [Qemu-devel] [PATCH v3 3/5] 9p: local: Avoid warning if FS_IOC_GETVERSION is not defined, Keno Fischer, 2018/06/02
- [Qemu-devel] [PATCH v3 2/5] 9p: xattr: Fix crashes due to free of uninitialized value, Keno Fischer, 2018/06/02
- [Qemu-devel] [PATCH v3 1/5] cutils: Provide strchrnul, Keno Fischer, 2018/06/02
- [Qemu-devel] [PATCH v3 4/5] 9p: Properly check/translate flags in unlinkat, Keno Fischer, 2018/06/02
- [Qemu-devel] [PATCH v3 5/5] 9p: xattr: Properly translate xattrcreate flags,
Keno Fischer <=
- Re: [Qemu-devel] [PATCH v3 0/5] Prepratory cleanup for 9p darwin support, Greg Kurz, 2018/06/05