From: "M. Mohan Kumar" <mohan@in.ibm.com>
To: qemu-devel@nongnu.org, aneesh.kumar@linux.vnet.ibm.com,
stefanha@gmail.com
Cc: "M. Mohan Kumar" <mohan@in.ibm.com>
Subject: [Qemu-devel] [PATCH V5 00/14] Proxy FS driver for VirtFS
Date: Wed, 14 Dec 2011 18:50:19 +0530 [thread overview]
Message-ID: <1323868833-541-1-git-send-email-mohan@in.ibm.com> (raw)
From: "M. Mohan Kumar" <mohan@in.ibm.com>
Pass-through security model in QEMU 9p server needs root privilege to do
few file operations (like chown, chmod to any mode/uid:gid). There are two
issues in pass-through security model
1) TOCTTOU vulnerability: Following symbolic links in the server could
provide access to files beyond 9p export path.
2) Running QEMU with root privilege could be a security issue.
To overcome above issues, following approach is used: A new filesytem
type 'proxy' is introduced. Proxy FS uses chroot + socket combination
for securing the vulnerability known with following symbolic links.
Intention of adding a new filesystem type is to allow qemu to run
in non-root mode, but doing privileged operations using socket IO.
Proxy helper(a stand alone binary part of qemu) is invoked with
root privileges. Proxy helper chroots into 9p export path and creates
a socket pair or a named socket based on the command line parameter.
Qemu and proxy helper communicate using this socket. QEMU proxy fs
driver sends filesystem request to proxy helper and receives the
response from it.
Proxy helper is designed so that it can drop the root privilege but
retaining capbilities that are needed for doing filesystem operations
(like CAP_DAC_OVERRIDE, CAP_FOWNER etc)
Changes from previous version V4:
* Handle the case request message > PROXY_MAX_IO_SZ as fatal, instead of
recovering.
* Changed size data type to unsigned for both ProxyHeader and V9fsString
* Added chdir("/") before doing chroot()
* Code changes due to changing ProxyHeader size type to unsigned
Changes from previous version V3:
* Lots of code change involving
* Improve error handling in marshaling/unmarshaling code
* Return ENOBUFS when request/response size exceeds maximum buffer size
Changes from previous version V2:
* Added check to handle failures in marshaling/unmarshaling code. Also make
sure that request/response will not exceed maximum buffer size (BUFF_SZ)
* Addressed Stefan's review comments
Changes from previous version:
*) Communication between qemu and helper process is similar to 9p way of packing
elements (pdu marshaling).
Aneesh Kumar K.V (1):
hw/9pfs: Move opt validation to FsDriver callback
M. Mohan Kumar (13):
hw/9pfs: Move pdu_marshal/unmarshal code to a seperate file
hw/9pfs: Add validation to {un}marshal code
hw/9pfs: Add new proxy filesystem driver
hw/9pfs: File system helper process for qemu 9p proxy FS
hw/9pfs: Open and create files
hw/9pfs: Create other filesystem objects
hw/9pfs: Add stat/readlink/statfs for proxy FS
hw/9pfs: File ownership and others
hw/9pfs: xattr interfaces in proxy filesystem driver
hw/9pfs: Proxy getversion
hw/9pfs: Documentation changes related to proxy fs
hw/9pfs: man page for proxy helper
hw/9pfs: Add support to use named socket for proxy FS
Makefile | 15 +-
Makefile.objs | 3 +-
configure | 19 +
fsdev/file-op-9p.h | 17 +-
fsdev/qemu-fsdev.c | 45 +--
fsdev/qemu-fsdev.h | 11 +-
fsdev/virtfs-proxy-helper.c | 1113 ++++++++++++++++++++++++++++++++++++
fsdev/virtfs-proxy-helper.texi | 63 +++
fsdev/virtio-9p-marshal.c | 360 ++++++++++++
fsdev/virtio-9p-marshal.h | 90 +++
hw/9pfs/virtio-9p-device.c | 13 +-
hw/9pfs/virtio-9p-handle.c | 20 +
hw/9pfs/virtio-9p-local.c | 34 ++
hw/9pfs/virtio-9p-proxy.c | 1210 ++++++++++++++++++++++++++++++++++++++++
hw/9pfs/virtio-9p-proxy.h | 95 ++++
hw/9pfs/virtio-9p.c | 756 ++++++++++++--------------
hw/9pfs/virtio-9p.h | 83 +---
qemu-config.c | 13 +
qemu-options.hx | 32 +-
vl.c | 18 +-
20 files changed, 3448 insertions(+), 562 deletions(-)
create mode 100644 fsdev/virtfs-proxy-helper.c
create mode 100644 fsdev/virtfs-proxy-helper.texi
create mode 100644 fsdev/virtio-9p-marshal.c
create mode 100644 fsdev/virtio-9p-marshal.h
create mode 100644 hw/9pfs/virtio-9p-proxy.c
create mode 100644 hw/9pfs/virtio-9p-proxy.h
--
1.7.6
next reply other threads:[~2011-12-14 13:21 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-12-14 13:20 M. Mohan Kumar [this message]
2011-12-14 13:20 ` [Qemu-devel] [PATCH V5 01/14] hw/9pfs: Move opt validation to FsDriver callback M. Mohan Kumar
2011-12-14 13:20 ` [Qemu-devel] [PATCH V5 02/14] hw/9pfs: Move pdu_marshal/unmarshal code to a seperate file M. Mohan Kumar
2011-12-14 13:20 ` [Qemu-devel] [PATCH V5 03/14] hw/9pfs: Add validation to {un}marshal code M. Mohan Kumar
2011-12-14 13:20 ` [Qemu-devel] [PATCH V5 04/14] hw/9pfs: Add new proxy filesystem driver M. Mohan Kumar
2011-12-14 13:20 ` [Qemu-devel] [PATCH V5 05/14] hw/9pfs: File system helper process for qemu 9p proxy FS M. Mohan Kumar
2011-12-14 13:20 ` [Qemu-devel] [PATCH V5 06/14] hw/9pfs: Open and create files M. Mohan Kumar
2012-10-04 14:50 ` Eric Blake
2011-12-14 13:20 ` [Qemu-devel] [PATCH V5 07/14] hw/9pfs: Create other filesystem objects M. Mohan Kumar
2011-12-14 13:20 ` [Qemu-devel] [PATCH V5 08/14] hw/9pfs: Add stat/readlink/statfs for proxy FS M. Mohan Kumar
2011-12-14 13:20 ` [Qemu-devel] [PATCH V5 09/14] hw/9pfs: File ownership and others M. Mohan Kumar
2011-12-14 13:20 ` [Qemu-devel] [PATCH V5 10/14] hw/9pfs: xattr interfaces in proxy filesystem driver M. Mohan Kumar
2011-12-14 13:20 ` [Qemu-devel] [PATCH V5 11/14] hw/9pfs: Proxy getversion M. Mohan Kumar
2011-12-14 13:20 ` [Qemu-devel] [PATCH V5 12/14] hw/9pfs: Documentation changes related to proxy fs M. Mohan Kumar
2011-12-14 13:20 ` [Qemu-devel] [PATCH V5 13/14] hw/9pfs: man page for proxy helper M. Mohan Kumar
2011-12-14 13:20 ` [Qemu-devel] [PATCH V5 14/14] hw/9pfs: Add support to use named socket for proxy FS M. Mohan Kumar
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=1323868833-541-1-git-send-email-mohan@in.ibm.com \
--to=mohan@in.ibm.com \
--cc=aneesh.kumar@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@gmail.com \
/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).