From: Wei Liu <wei.liu2@citrix.com>
To: Ian Jackson <Ian.Jackson@eu.citrix.com>
Cc: Anthony PERARD <anthony.perard@citrix.com>,
Xen-devel <xen-devel@lists.xenproject.org>,
Wei Liu <wei.liu2@citrix.com>
Subject: Re: [PATCH for-4.7] libxl: set XEN_QEMU_CONSOLE_LIMIT for QEMU
Date: Thu, 26 May 2016 16:54:07 +0100 [thread overview]
Message-ID: <20160526155407.GA22076@citrix.com> (raw)
In-Reply-To: <20160526154759.GZ22076@citrix.com>
On Thu, May 26, 2016 at 04:47:59PM +0100, Wei Liu wrote:
> On Thu, May 26, 2016 at 04:41:53PM +0100, Ian Jackson wrote:
> > Wei Liu writes ("[PATCH for-4.7] libxl: set XEN_QEMU_CONSOLE_LIMIT for QEMU"):
> > > XSA-180 provides a patch to QEMU to bodge QEMU logging issue. We
> > > explicitly set the limit in libxl for 4.7.
> > ...
> > > + unsigned long limit = 0;
> > > + const char *s = getenv("XEN_QEMU_CONSOLE_LIMIT");
> > > +
> > > + limit = s ? strtoul(s,0,0) : 1*1024*1024;
> > > + flexarray_append_pair(dm_envs, "XEN_QEMU_CONSOLE_LIMIT",
> > > + GCSPRINTF("%lu", limit));
> >
> > This is rather more complex than it needs to be. What would be wrong
> > with
> > if (getenv("XEN_QEMU_CONSOLE_LIMIT")) return;
> > flexarray_append_pair(dm_envs, "XEN_QEMU_CONSOLE_LIMIT", "1048576");
> > ?
> >
>
> Nice, this is simpler. I will use this version and keep your ack.
>
I will push this patch soon.
---8<---
From 1d915bc7805bde9fe90341e9bcea01bf50154d87 Mon Sep 17 00:00:00 2001
From: Wei Liu <wei.liu2@citrix.com>
Date: Thu, 26 May 2016 16:11:42 +0100
Subject: [PATCH] libxl: set XEN_QEMU_CONSOLE_LIMIT for QEMU
XSA-180 provides a patch to QEMU to bodge QEMU logging issue. We
explicitly set the limit in libxl for 4.7.
Introduce a function for setting the environment variable and call it in
the right places.
Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
---
tools/libxl/libxl_dm.c | 29 ++++++++++++++++++++++++++---
1 file changed, 26 insertions(+), 3 deletions(-)
diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
index 6bbc7c3..155a653 100644
--- a/tools/libxl/libxl_dm.c
+++ b/tools/libxl/libxl_dm.c
@@ -365,6 +365,20 @@ int libxl__domain_device_construct_rdm(libxl__gc *gc,
return ERROR_FAIL;
}
+/* XSA-180 / CVE-2014-3672
+ *
+ * The QEMU shipped with Xen has a bodge. It checks for
+ * XEN_QEMU_CONSOLE_LIMIT to see how much data QEMU is allowed
+ * to write to stderr. We set that to 1MB if it is not set by
+ * system administrator.
+ */
+static void libxl__set_qemu_env_for_xsa_180(libxl__gc *gc,
+ flexarray_t *dm_envs)
+{
+ if (getenv("XEN_QEMU_CONSOLE_LIMIT")) return;
+ flexarray_append_pair(dm_envs, "XEN_QEMU_CONSOLE_LIMIT", "1048576");
+}
+
const libxl_vnc_info *libxl__dm_vnc(const libxl_domain_config *guest_config)
{
const libxl_vnc_info *vnc = NULL;
@@ -415,6 +429,8 @@ static int libxl__build_device_model_args_old(libxl__gc *gc,
dm_args = flexarray_make(gc, 16, 1);
dm_envs = flexarray_make(gc, 16, 1);
+ libxl__set_qemu_env_for_xsa_180(gc, dm_envs);
+
flexarray_vappend(dm_args, dm,
"-d", GCSPRINTF("%d", domid), NULL);
@@ -913,6 +929,8 @@ static int libxl__build_device_model_args_new(libxl__gc *gc,
dm_args = flexarray_make(gc, 16, 1);
dm_envs = flexarray_make(gc, 16, 1);
+ libxl__set_qemu_env_for_xsa_180(gc, dm_envs);
+
flexarray_vappend(dm_args, dm,
"-xen-domid",
GCSPRINTF("%d", guest_domid), NULL);
@@ -2193,8 +2211,8 @@ static void device_model_spawn_outcome(libxl__egc *egc,
void libxl__spawn_qdisk_backend(libxl__egc *egc, libxl__dm_spawn_state *dmss)
{
STATE_AO_GC(dmss->spawn.ao);
- flexarray_t *dm_args;
- char **args;
+ flexarray_t *dm_args, *dm_envs;
+ char **args, **envs;
const char *dm;
int logfile_w, null = -1, rc;
uint32_t domid = dmss->guest_domid;
@@ -2203,6 +2221,8 @@ void libxl__spawn_qdisk_backend(libxl__egc *egc, libxl__dm_spawn_state *dmss)
dm = qemu_xen_path(gc);
dm_args = flexarray_make(gc, 15, 1);
+ dm_envs = flexarray_make(gc, 1, 1);
+
flexarray_vappend(dm_args, dm, "-xen-domid",
GCSPRINTF("%d", domid), NULL);
flexarray_append(dm_args, "-xen-attach");
@@ -2216,6 +2236,9 @@ void libxl__spawn_qdisk_backend(libxl__egc *egc, libxl__dm_spawn_state *dmss)
flexarray_append(dm_args, NULL);
args = (char **) flexarray_contents(dm_args);
+ libxl__set_qemu_env_for_xsa_180(gc, dm_envs);
+ envs = (char **) flexarray_contents(dm_envs);
+
logfile_w = libxl__create_qemu_logfile(gc, GCSPRINTF("qdisk-%u", domid));
if (logfile_w < 0) {
rc = logfile_w;
@@ -2253,7 +2276,7 @@ void libxl__spawn_qdisk_backend(libxl__egc *egc, libxl__dm_spawn_state *dmss)
goto out;
if (!rc) { /* inner child */
setsid();
- libxl__exec(gc, null, logfile_w, logfile_w, dm, args, NULL);
+ libxl__exec(gc, null, logfile_w, logfile_w, dm, args, envs);
}
rc = 0;
--
2.1.4
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel
prev parent reply other threads:[~2016-05-26 15:54 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-26 15:19 [PATCH for-4.7] XSA-180 patches for 4.7 Wei Liu
2016-05-26 15:21 ` [PATCH for-4.7] libxl: set XEN_QEMU_CONSOLE_LIMIT for QEMU Wei Liu
2016-05-26 15:21 ` [PATCH QEMU for-4.7] main loop: Big hammer to fix logfile disk DoS in Xen setups Wei Liu
2016-05-26 15:36 ` George Dunlap
2016-05-26 15:39 ` Wei Liu
2016-05-26 15:42 ` Ian Jackson
2016-05-26 16:10 ` Anthony PERARD
2016-05-26 16:50 ` Anthony PERARD
2016-05-26 15:41 ` [PATCH for-4.7] libxl: set XEN_QEMU_CONSOLE_LIMIT for QEMU Ian Jackson
2016-05-26 15:47 ` Wei Liu
2016-05-26 15:54 ` Wei Liu [this message]
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=20160526155407.GA22076@citrix.com \
--to=wei.liu2@citrix.com \
--cc=Ian.Jackson@eu.citrix.com \
--cc=anthony.perard@citrix.com \
--cc=xen-devel@lists.xenproject.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.