]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
libxl: Check for control_d string to decide about dom0
authorStefan Bader <stefan.bader@canonical.com>
Wed, 12 Mar 2014 12:03:26 +0000 (13:03 +0100)
committerCole Robinson <crobinso@redhat.com>
Mon, 8 Sep 2014 15:33:25 +0000 (11:33 -0400)
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 <stefan.bader@canonical.com>
(cherry picked from commit 8c869ad9f9c5d57ba0ef516835a08afdba7ad828)

src/libxl/libxl_driver.c

index 764a686e29896338f78c6f008477c629aca11f1f..fb2a7cc78b507e8f1043dfa90daba4b7cac3b171 100644 (file)
@@ -783,6 +783,7 @@ libxlDriverShouldLoad(bool privileged)
     bool ret = false;
     virCommandPtr cmd;
     int status;
+    char *output = NULL;
 
     /* Don't load if non-root */
     if (!privileged) {
@@ -790,8 +791,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");