From: Stefan Bader Date: Wed, 12 Mar 2014 12:03:26 +0000 (+0100) Subject: libxl: Check for control_d string to decide about dom0 X-Git-Tag: v1.2.3-rc1~232 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8c869ad9f9c5d57ba0ef516835a08afdba7ad828;p=thirdparty%2Flibvirt.git libxl: Check for control_d string to decide about dom0 As soon as any guest mounts xenfs to /proc/xen, there is a capabilities file in that directory. However it returns nothing when reading from it. Change the test to actually check the contents of the file. BugLink: http://bugs.launchpad.net/bugs/1248025 Signed-off-by: Stefan Bader --- diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index c8e014e3a5..ae7342a9ba 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -962,6 +962,7 @@ libxlDriverShouldLoad(bool privileged) bool ret = false; virCommandPtr cmd; int status; + char *output = NULL; /* Don't load if non-root */ if (!privileged) { @@ -969,8 +970,17 @@ libxlDriverShouldLoad(bool privileged) return ret; } - /* Don't load if not running on a Xen control domain (dom0) */ - if (!virFileExists("/proc/xen/capabilities")) { + /* + * Don't load if not running on a Xen control domain (dom0). It is not + * sufficient to check for the file to exist as any guest can mount + * xenfs to /proc/xen. + */ + status = virFileReadAll("/proc/xen/capabilities", 10, &output); + if (status >= 0) { + status = strncmp(output, "control_d", 9); + } + VIR_FREE(output); + if (status) { VIR_INFO("No Xen capabilities detected, probably not running " "in a Xen Dom0. Disabling libxenlight driver");