From patchwork Mon Jun 14 20:34:43 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: jvrao X-Patchwork-Id: 55590 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id F03E8B7D86 for ; Tue, 15 Jun 2010 06:46:09 +1000 (EST) Received: from localhost ([127.0.0.1]:55881 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OOGXn-0000AY-1G for incoming@patchwork.ozlabs.org; Mon, 14 Jun 2010 16:46:07 -0400 Received: from [140.186.70.92] (port=57770 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OOGJb-0000AR-DP for qemu-devel@nongnu.org; Mon, 14 Jun 2010 16:31:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OOGJa-00042b-3j for qemu-devel@nongnu.org; Mon, 14 Jun 2010 16:31:27 -0400 Received: from e32.co.us.ibm.com ([32.97.110.150]:38227) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OOGJZ-00042S-Uh for qemu-devel@nongnu.org; Mon, 14 Jun 2010 16:31:26 -0400 Received: from d03relay05.boulder.ibm.com (d03relay05.boulder.ibm.com [9.17.195.107]) by e32.co.us.ibm.com (8.14.4/8.13.1) with ESMTP id o5EKNrCi006550 for ; Mon, 14 Jun 2010 14:23:53 -0600 Received: from d03av02.boulder.ibm.com (d03av02.boulder.ibm.com [9.17.195.168]) by d03relay05.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id o5EKVE4K112166 for ; Mon, 14 Jun 2010 14:31:16 -0600 Received: from d03av02.boulder.ibm.com (loopback [127.0.0.1]) by d03av02.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id o5EKV9J1012628 for ; Mon, 14 Jun 2010 14:31:11 -0600 Received: from localhost.localdomain (elm9m80.beaverton.ibm.com [9.47.81.80]) by d03av02.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id o5EKV5FA012202; Mon, 14 Jun 2010 14:31:08 -0600 From: "Venkateswararao Jujjuri (JV)" To: qemu-devel@nongnu.org Date: Mon, 14 Jun 2010 13:34:43 -0700 Message-Id: <1276547689-3408-5-git-send-email-jvrao@linux.vnet.ibm.com> X-Mailer: git-send-email 1.6.0.6 In-Reply-To: <1276547689-3408-1-git-send-email-jvrao@linux.vnet.ibm.com> References: <1276547689-3408-1-git-send-email-jvrao@linux.vnet.ibm.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6, seldom 2.4 (older, 4) Cc: aliguori@us.ibm.com, "Venkateswararao Jujjuri \(JV\)" Subject: [Qemu-devel] [PATCH-V7 04/10] virtio-9p: Security model for chown X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org mapped model changes the owner in the extended attributes. passthrough model does the change through lchown() as the server don't need to follow the link and client will send the actual filesystem object. Signed-off-by: Venkateswararao Jujjuri --- hw/file-op-9p.h | 2 +- hw/virtio-9p-local.c | 9 +++++++-- hw/virtio-9p.c | 9 +++++++-- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/hw/file-op-9p.h b/hw/file-op-9p.h index 1c8d89b..a53cd35 100644 --- a/hw/file-op-9p.h +++ b/hw/file-op-9p.h @@ -50,7 +50,7 @@ typedef struct FileOperations int (*lstat)(FsContext *, const char *, struct stat *); ssize_t (*readlink)(FsContext *, const char *, char *, size_t); int (*chmod)(FsContext *, const char *, FsCred *); - int (*chown)(FsContext *, const char *, uid_t, gid_t); + int (*chown)(FsContext *, const char *, FsCred *); int (*mknod)(FsContext *, const char *, mode_t, dev_t); int (*mksock)(FsContext *, const char *); int (*utime)(FsContext *, const char *, const struct utimbuf *); diff --git a/hw/virtio-9p-local.c b/hw/virtio-9p-local.c index 9bdcf02..1d7cb32 100644 --- a/hw/virtio-9p-local.c +++ b/hw/virtio-9p-local.c @@ -240,9 +240,14 @@ static int local_rename(FsContext *ctx, const char *oldpath, } -static int local_chown(FsContext *ctx, const char *path, uid_t uid, gid_t gid) +static int local_chown(FsContext *fs_ctx, const char *path, FsCred *credp) { - return chown(rpath(ctx, path), uid, gid); + if (fs_ctx->fs_sm == SM_MAPPED) { + return local_set_xattr(rpath(fs_ctx, path), credp); + } else if (fs_ctx->fs_sm == SM_PASSTHROUGH) { + return lchown(rpath(fs_ctx, path), credp->fc_uid, credp->fc_gid); + } + return -1; } static int local_utime(FsContext *ctx, const char *path, diff --git a/hw/virtio-9p.c b/hw/virtio-9p.c index 24291f4..fa459c9 100644 --- a/hw/virtio-9p.c +++ b/hw/virtio-9p.c @@ -209,7 +209,12 @@ static int v9fs_do_rename(V9fsState *s, V9fsString *oldpath, static int v9fs_do_chown(V9fsState *s, V9fsString *path, uid_t uid, gid_t gid) { - return s->ops->chown(&s->ctx, path->data, uid, gid); + FsCred cred; + cred_init(&cred); + cred.fc_uid = uid; + cred.fc_gid = gid; + + return s->ops->chown(&s->ctx, path->data, &cred); } static int v9fs_do_utime(V9fsState *s, V9fsString *path, @@ -2014,7 +2019,7 @@ static void v9fs_wstat_post_utime(V9fsState *s, V9fsWstatState *vs, int err) goto out; } - if (vs->v9stat.n_gid != -1) { + if (vs->v9stat.n_gid != -1 || vs->v9stat.n_uid != -1) { if (v9fs_do_chown(s, &vs->fidp->path, vs->v9stat.n_uid, vs->v9stat.n_gid)) { err = -errno;