From: "Venkateswararao Jujjuri (JV)" <jvrao@linux.vnet.ibm.com>
To: qemu-devel@nongnu.org
Cc: aliguori@us.ibm.com,
Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>,
"Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
Subject: [Qemu-devel] [PATCH-V3 21/24] virtio-9p: Add SM_NONE security model
Date: Thu, 22 Jul 2010 08:58:08 -0700 [thread overview]
Message-ID: <1279814291-8301-22-git-send-email-jvrao@linux.vnet.ibm.com> (raw)
In-Reply-To: <1279814291-8301-1-git-send-email-jvrao@linux.vnet.ibm.com>
From: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
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 <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
---
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 3d5f761..fcaa3ae 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 c41193c..bc6793a 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 88e9fe2..6899070 100644
--- a/hw/virtio-9p.c
+++ b/hw/virtio-9p.c
@@ -3540,12 +3540,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
next prev parent reply other threads:[~2010-07-22 15:55 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-22 15:57 [Qemu-devel] [PATCH-V3 00/24] Consolidated VirtFS work Venkateswararao Jujjuri (JV)
2010-07-22 15:57 ` [Qemu-devel] [PATCH-V3 01/24] qemu: virtio-9p: Recognize 9P2000.L protocol Venkateswararao Jujjuri (JV)
2010-07-22 15:57 ` [Qemu-devel] [PATCH-V3 02/24] qemu: virtio-9p: Implement statfs support in server Venkateswararao Jujjuri (JV)
2010-07-22 15:57 ` [Qemu-devel] [PATCH-V3 03/24] virtio-9p: Return correct error from v9fs_remove Venkateswararao Jujjuri (JV)
2010-07-22 15:57 ` [Qemu-devel] [PATCH-V3 04/24] [V4] virtio-9p: readdir implementation for 9p2000.L Venkateswararao Jujjuri (JV)
2010-07-22 15:57 ` [Qemu-devel] [PATCH-V3 05/24] virtio-9p: Compute iounit based on host filesystem block size Venkateswararao Jujjuri (JV)
2010-07-22 15:57 ` [Qemu-devel] [PATCH-V3 06/24] virtio-9p: getattr server implementation for 9P2000.L protocol Venkateswararao Jujjuri (JV)
2010-07-22 15:57 ` [Qemu-devel] [PATCH-V3 07/24] virtio-9p: Do not reset atime Venkateswararao Jujjuri (JV)
2010-07-22 15:57 ` [Qemu-devel] [PATCH-V3 08/24] [virtio-9p] Make v9fs_do_utimensat accept timespec structures instead of v9stat Venkateswararao Jujjuri (JV)
2010-07-22 15:57 ` [Qemu-devel] [PATCH-V3 09/24] virtio-9p: Implement server side of setattr for 9P2000.L protocol Venkateswararao Jujjuri (JV)
2010-07-22 15:57 ` [Qemu-devel] [PATCH-V3 10/24] [virtio-9p] Implement TLINK for 9P2000.L Venkateswararao Jujjuri (JV)
2010-07-22 15:57 ` [Qemu-devel] [PATCH-V3 11/24] [virtio-9p] Define and implement TSYMLINK " Venkateswararao Jujjuri (JV)
2010-07-22 15:57 ` [Qemu-devel] [PATCH-V3 12/24] [virtio-9p] This patch implements TLCREATE for 9p2000.L protocol Venkateswararao Jujjuri (JV)
2010-07-22 15:58 ` [Qemu-devel] [PATCH-V3 13/24] qemu: virtio-9p: Implement TMKNOD Venkateswararao Jujjuri (JV)
2010-07-22 15:58 ` [Qemu-devel] [PATCH-V3 14/24] qemu: virtio-9p: Implement TMKDIR Venkateswararao Jujjuri (JV)
2010-07-22 15:58 ` [Qemu-devel] [PATCH-V3 15/24] rename - change name of file or directory Venkateswararao Jujjuri (JV)
2010-07-22 15:58 ` [Qemu-devel] [PATCH-V3 16/24] qemu: virtio-9p: Implement LOPEN Venkateswararao Jujjuri (JV)
2010-07-22 15:58 ` [Qemu-devel] [PATCH-V3 17/24] virtio-9p: Add fidtype so that we can do type specific operation Venkateswararao Jujjuri (JV)
2010-07-22 15:58 ` [Qemu-devel] [PATCH-V3 18/24] virtio-9p: Implement TXATTRWALK Venkateswararao Jujjuri (JV)
2010-07-22 15:58 ` [Qemu-devel] [PATCH-V3 19/24] virtio-9p: Implement TXATTRCREATE Venkateswararao Jujjuri (JV)
2010-07-22 15:58 ` [Qemu-devel] [PATCH-V3 20/24] virtio-9p: Hide user.virtfs xattr in case of mapped security Venkateswararao Jujjuri (JV)
2010-07-22 15:58 ` Venkateswararao Jujjuri (JV) [this message]
2010-07-22 15:58 ` [Qemu-devel] [PATCH-V3 22/24] virtio-9p: Use lchown which won't follow symlink Venkateswararao Jujjuri (JV)
2010-07-22 15:58 ` [Qemu-devel] [PATCH-V3 23/24] virtio-9p: Fix the memset usage Venkateswararao Jujjuri (JV)
2010-07-22 15:58 ` [Qemu-devel] [PATCH-V3 24/24] virtio-9p: Fix formatting issues in v9fs_wstat_post_chown() Venkateswararao Jujjuri (JV)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1279814291-8301-22-git-send-email-jvrao@linux.vnet.ibm.com \
--to=jvrao@linux.vnet.ibm.com \
--cc=aliguori@us.ibm.com \
--cc=aneesh.kumar@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).