[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH-V2 21/24] virtio-9p: Add SM_NONE security model
From: |
Venkateswararao Jujjuri (JV) |
Subject: |
[Qemu-devel] [PATCH-V2 21/24] virtio-9p: Add SM_NONE security model |
Date: |
Wed, 21 Jul 2010 09:04:56 -0700 |
From: Aneesh Kumar K.V <address@hidden>
This is equivalent to SM_PASSTHROUGH security model.
The only exception is, failure of privilige operation like chown
are ignored. This makes a passthrough like security model usable
for people who runs kvm as non root
Signed-off-by: Aneesh Kumar K.V <address@hidden>
Signed-off-by: Venkateswararao Jujjuri <address@hidden>
---
hw/file-op-9p.h | 15 +++++++++++++--
hw/virtio-9p-local.c | 40 ++++++++++++++++++++++++++++++----------
hw/virtio-9p.c | 13 ++++++++++---
qemu-options.hx | 4 ++--
vl.c | 2 +-
5 files changed, 56 insertions(+), 18 deletions(-)
diff --git a/hw/file-op-9p.h b/hw/file-op-9p.h
index 2563f7b..6461a20 100644
--- a/hw/file-op-9p.h
+++ b/hw/file-op-9p.h
@@ -24,8 +24,19 @@
typedef enum
{
- SM_PASSTHROUGH = 1, /* uid/gid set on fileserver files */
- SM_MAPPED, /* uid/gid part of xattr */
+ /*
+ * Server will try to set uid/gid.
+ * On failure ignore the error.
+ */
+ SM_NONE = 0,
+ /*
+ * uid/gid set on fileserver files
+ */
+ SM_PASSTHROUGH = 1,
+ /*
+ * uid/gid part of xattr
+ */
+ SM_MAPPED,
} SecModel;
typedef struct FsCred
diff --git a/hw/virtio-9p-local.c b/hw/virtio-9p-local.c
index 87ff953..67f12ad 100644
--- a/hw/virtio-9p-local.c
+++ b/hw/virtio-9p-local.c
@@ -102,7 +102,13 @@ static int local_post_create_passthrough(FsContext
*fs_ctx, const char *path,
return -1;
}
if (chown(rpath(fs_ctx, path), credp->fc_uid, credp->fc_gid) < 0) {
- return -1;
+ /*
+ * If we fail to change ownership and if we are
+ * using security model none. Ignore the error
+ */
+ if (fs_ctx->fs_sm != SM_NONE) {
+ return -1;
+ }
}
return 0;
}
@@ -122,7 +128,8 @@ static ssize_t local_readlink(FsContext *fs_ctx, const char
*path,
} while (tsize == -1 && errno == EINTR);
close(fd);
return tsize;
- } else if (fs_ctx->fs_sm == SM_PASSTHROUGH) {
+ } else if ((fs_ctx->fs_sm == SM_PASSTHROUGH) ||
+ (fs_ctx->fs_sm == SM_NONE)) {
tsize = readlink(rpath(fs_ctx, path), buf, bufsz);
}
return tsize;
@@ -189,7 +196,8 @@ static int local_chmod(FsContext *fs_ctx, const char *path,
FsCred *credp)
{
if (fs_ctx->fs_sm == SM_MAPPED) {
return local_set_xattr(rpath(fs_ctx, path), credp);
- } else if (fs_ctx->fs_sm == SM_PASSTHROUGH) {
+ } else if ((fs_ctx->fs_sm == SM_PASSTHROUGH) ||
+ (fs_ctx->fs_sm == SM_NONE)) {
return chmod(rpath(fs_ctx, path), credp->fc_mode);
}
return -1;
@@ -211,7 +219,8 @@ static int local_mknod(FsContext *fs_ctx, const char *path,
FsCred *credp)
serrno = errno;
goto err_end;
}
- } else if (fs_ctx->fs_sm == SM_PASSTHROUGH) {
+ } else if ((fs_ctx->fs_sm == SM_PASSTHROUGH) ||
+ (fs_ctx->fs_sm == SM_NONE)) {
err = mknod(rpath(fs_ctx, path), credp->fc_mode, credp->fc_rdev);
if (err == -1) {
return err;
@@ -247,7 +256,8 @@ static int local_mkdir(FsContext *fs_ctx, const char *path,
FsCred *credp)
serrno = errno;
goto err_end;
}
- } else if (fs_ctx->fs_sm == SM_PASSTHROUGH) {
+ } else if ((fs_ctx->fs_sm == SM_PASSTHROUGH) ||
+ (fs_ctx->fs_sm == SM_NONE)) {
err = mkdir(rpath(fs_ctx, path), credp->fc_mode);
if (err == -1) {
return err;
@@ -316,7 +326,8 @@ static int local_open2(FsContext *fs_ctx, const char *path,
int flags,
serrno = errno;
goto err_end;
}
- } else if (fs_ctx->fs_sm == SM_PASSTHROUGH) {
+ } else if ((fs_ctx->fs_sm == SM_PASSTHROUGH) ||
+ (fs_ctx->fs_sm == SM_NONE)) {
fd = open(rpath(fs_ctx, path), flags, credp->fc_mode);
if (fd == -1) {
return fd;
@@ -372,15 +383,23 @@ static int local_symlink(FsContext *fs_ctx, const char
*oldpath,
serrno = errno;
goto err_end;
}
- } else if (fs_ctx->fs_sm == SM_PASSTHROUGH) {
+ } else if ((fs_ctx->fs_sm == SM_PASSTHROUGH) ||
+ (fs_ctx->fs_sm == SM_NONE)) {
err = symlink(oldpath, rpath(fs_ctx, newpath));
if (err) {
return err;
}
err = lchown(rpath(fs_ctx, newpath), credp->fc_uid, credp->fc_gid);
if (err == -1) {
- serrno = errno;
- goto err_end;
+ /*
+ * If we fail to change ownership and if we are
+ * using security model none. Ignore the error
+ */
+ if (fs_ctx->fs_sm != SM_NONE) {
+ serrno = errno;
+ goto err_end;
+ } else
+ err = 0;
}
}
return err;
@@ -450,7 +469,8 @@ static int local_chown(FsContext *fs_ctx, const char *path,
FsCred *credp)
return lchown(rpath(fs_ctx, path), credp->fc_uid, credp->fc_gid);
} else if (fs_ctx->fs_sm == SM_MAPPED) {
return local_set_xattr(rpath(fs_ctx, path), credp);
- } else if (fs_ctx->fs_sm == SM_PASSTHROUGH) {
+ } else if ((fs_ctx->fs_sm == SM_PASSTHROUGH) ||
+ (fs_ctx->fs_sm == SM_NONE)) {
return lchown(rpath(fs_ctx, path), credp->fc_uid, credp->fc_gid);
}
return -1;
diff --git a/hw/virtio-9p.c b/hw/virtio-9p.c
index d931e05..68103ab 100644
--- a/hw/virtio-9p.c
+++ b/hw/virtio-9p.c
@@ -3547,12 +3547,19 @@ VirtIODevice *virtio_9p_init(DeviceState *dev, V9fsConf
*conf)
* Client user credentials are saved in extended attributes.
*/
s->ctx.fs_sm = SM_MAPPED;
+ } else if (!strcmp(fse->security_model, "none")) {
+ /* Files on the fileserver are set to QEMU credentials.
+ * Client user credentials are saved in extended attributes.
+ */
+ s->ctx.fs_sm = SM_NONE;
+
} else {
- /* user haven't specified a correct security option */
- fprintf(stderr, "one of the following must be specified as the"
+ /* Default so SM_NONE option which was the default before */
+ fprintf(stderr, "Default to security_mode=none. You may want"
+ " enable advanced security model using "
"security option:\n\t security_model=passthrough \n\t "
"security_model=mapped\n");
- return NULL;
+ s->ctx.fs_sm = SM_MAPPED;
}
if (lstat(fse->path, &stat)) {
diff --git a/qemu-options.hx b/qemu-options.hx
index 0d7dd90..c15203d 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -486,7 +486,7 @@ ETEXI
DEFHEADING(File system options:)
DEF("fsdev", HAS_ARG, QEMU_OPTION_fsdev,
- "-fsdev local,id=id,path=path,security_model=[mapped|passthrough]\n",
+ "-fsdev local,id=id,path=path,security_model=[mapped|passthrough|none]\n",
QEMU_ARCH_ALL)
STEXI
@@ -521,7 +521,7 @@ ETEXI
DEFHEADING(Virtual File system pass-through options:)
DEF("virtfs", HAS_ARG, QEMU_OPTION_virtfs,
- "-virtfs
local,path=path,mount_tag=tag,security_model=[mapped|passthrough]\n",
+ "-virtfs
local,path=path,mount_tag=tag,security_model=[mapped|passthrough|none]\n",
QEMU_ARCH_ALL)
STEXI
diff --git a/vl.c b/vl.c
index 8a5de9f..cc2c083 100644
--- a/vl.c
+++ b/vl.c
@@ -2305,7 +2305,7 @@ int main(int argc, char **argv, char **envp)
qemu_opt_get(opts, "path") == NULL ||
qemu_opt_get(opts, "security_model") == NULL) {
fprintf(stderr, "Usage: -virtfs fstype,path=/share_path/,"
- "security_model=[mapped|passthrough],"
+ "security_model=[mapped|passthrough|none],"
"mnt_tag=tag.\n");
exit(1);
}
--
1.6.5.2
- [Qemu-devel] [PATCH-V2 19/24] virtio-9p: Implement TXATTRCREATE, (continued)
- [Qemu-devel] [PATCH-V2 19/24] virtio-9p: Implement TXATTRCREATE, Venkateswararao Jujjuri (JV), 2010/07/21
- [Qemu-devel] [PATCH-V2 18/24] virtio-9p: Implement TXATTRWALK, Venkateswararao Jujjuri (JV), 2010/07/21
- [Qemu-devel] [PATCH-V2 03/24] virtio-9p: Return correct error from v9fs_remove, Venkateswararao Jujjuri (JV), 2010/07/21
- [Qemu-devel] [PATCH-V2 06/24] virtio-9p: getattr server implementation for 9P2000.L protocol., Venkateswararao Jujjuri (JV), 2010/07/21
- [Qemu-devel] [PATCH-V2 17/24] virtio-9p: Add fidtype so that we can do type specific operation, Venkateswararao Jujjuri (JV), 2010/07/21
- [Qemu-devel] [PATCH-V2 08/24] [virtio-9p] Make v9fs_do_utimensat accept timespec structures instead of v9stat., Venkateswararao Jujjuri (JV), 2010/07/21
- [Qemu-devel] [PATCH-V2 16/24] qemu: virtio-9p: Implement LOPEN, Venkateswararao Jujjuri (JV), 2010/07/21
- [Qemu-devel] [PATCH-V2 09/24] virtio-9p: Implement server side of setattr for 9P2000.L protocol., Venkateswararao Jujjuri (JV), 2010/07/21
- [Qemu-devel] [PATCH-V2 24/24] virtio-9p: Fix formatting issues in v9fs_wstat_post_chown(), Venkateswararao Jujjuri (JV), 2010/07/21
- [Qemu-devel] [PATCH-V2 23/24] virtio-9p: Fix the memset usage, Venkateswararao Jujjuri (JV), 2010/07/21
- [Qemu-devel] [PATCH-V2 21/24] virtio-9p: Add SM_NONE security model,
Venkateswararao Jujjuri (JV) <=
- [Qemu-devel] [PATCH-V2 13/24] qemu: virtio-9p: Implement TMKNOD, Venkateswararao Jujjuri (JV), 2010/07/21
- [Qemu-devel] [PATCH-V2 20/24] virtio-9p: Hide user.virtfs xattr in case of mapped security., Venkateswararao Jujjuri (JV), 2010/07/21
- [Qemu-devel] [PATCH-V2 07/24] virtio-9p: Do not reset atime, Venkateswararao Jujjuri (JV), 2010/07/21
- [Qemu-devel] [PATCH-V2 12/24] [virtio-9p] This patch implements TLCREATE for 9p2000.L protocol., Venkateswararao Jujjuri (JV), 2010/07/21
- [Qemu-devel] [PATCH-V2 05/24] virtio-9p: Compute iounit based on host filesystem block size, Venkateswararao Jujjuri (JV), 2010/07/21
- [Qemu-devel] [PATCH-V2 15/24] rename - change name of file or directory, Venkateswararao Jujjuri (JV), 2010/07/21
- [Qemu-devel] [PATCH-V2 14/24] qemu: virtio-9p: Implement TMKDIR, Venkateswararao Jujjuri (JV), 2010/07/21
- [Qemu-devel] [PATCH-V2 04/24] [V4] virtio-9p: readdir implementation for 9p2000.L, Venkateswararao Jujjuri (JV), 2010/07/21
- [Qemu-devel] [PATCH-V2 22/24] virtio-9p: Use lchown which won't follow symlink, Venkateswararao Jujjuri (JV), 2010/07/21