[libvirt] [PATCH v3 13/16] Remove non-functional code for setting up non-root cgroups

Daniel P. Berrange berrange at redhat.com
Wed Apr 10 10:08:22 UTC 2013


From: "Daniel P. Berrange" <berrange at redhat.com>

The virCgroupNewDriver method had a 'bool privileged' param.
If a false value was ever passed in, it would simply not
work, since non-root users don't have any privileges to create
new cgroups. Just delete this broken code entirely and make
the QEMU driver skip cgroup setup in non-privileged mode

Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
---
 src/lxc/lxc_cgroup.c   |  1 -
 src/qemu/qemu_cgroup.c |  4 +++-
 src/util/vircgroup.c   | 27 +++------------------------
 src/util/vircgroup.h   |  1 -
 tests/vircgrouptest.c  | 12 ++++++------
 5 files changed, 12 insertions(+), 33 deletions(-)

diff --git a/src/lxc/lxc_cgroup.c b/src/lxc/lxc_cgroup.c
index 8f19057..0a43b61 100644
--- a/src/lxc/lxc_cgroup.c
+++ b/src/lxc/lxc_cgroup.c
@@ -581,7 +581,6 @@ virCgroupPtr virLXCCgroupCreate(virDomainDefPtr def, bool startup)
     } else {
         rc = virCgroupNewDriver("lxc",
                                 true,
-                                true,
                                 -1,
                                 &parent);
         if (rc != 0) {
diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c
index db9aafe..a6c8638 100644
--- a/src/qemu/qemu_cgroup.c
+++ b/src/qemu/qemu_cgroup.c
@@ -196,6 +196,9 @@ int qemuInitCgroup(virQEMUDriverPtr driver,
     virCgroupPtr parent = NULL;
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
 
+    if (!cfg->privileged)
+        goto done;
+
     virCgroupFree(&priv->cgroup);
 
     if (!vm->def->resource && startup) {
@@ -256,7 +259,6 @@ int qemuInitCgroup(virQEMUDriverPtr driver,
         }
     } else {
         rc = virCgroupNewDriver("qemu",
-                                cfg->privileged,
                                 true,
                                 cfg->cgroupControllers,
                                 &parent);
diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
index 40e0fe6..6202614 100644
--- a/src/util/vircgroup.c
+++ b/src/util/vircgroup.c
@@ -794,8 +794,7 @@ err:
     return rc;
 }
 
-static int virCgroupAppRoot(bool privileged,
-                            virCgroupPtr *group,
+static int virCgroupAppRoot(virCgroupPtr *group,
                             bool create,
                             int controllers)
 {
@@ -807,26 +806,7 @@ static int virCgroupAppRoot(bool privileged,
     if (rc != 0)
         return rc;
 
-    if (privileged) {
-        rc = virCgroupNew("libvirt", selfgrp, controllers, group);
-    } else {
-        char *rootname;
-        char *username;
-        username = virGetUserName(getuid());
-        if (!username) {
-            rc = -ENOMEM;
-            goto cleanup;
-        }
-        rc = virAsprintf(&rootname, "libvirt-%s", username);
-        VIR_FREE(username);
-        if (rc < 0) {
-            rc = -ENOMEM;
-            goto cleanup;
-        }
-
-        rc = virCgroupNew(rootname, selfgrp, controllers, group);
-        VIR_FREE(rootname);
-    }
+    rc = virCgroupNew("libvirt", selfgrp, controllers, group);
     if (rc != 0)
         goto cleanup;
 
@@ -1135,7 +1115,6 @@ int virCgroupNewPartition(const char *path ATTRIBUTE_UNUSED,
  */
 #if defined HAVE_MNTENT_H && defined HAVE_GETMNTENT_R
 int virCgroupNewDriver(const char *name,
-                       bool privileged,
                        bool create,
                        int controllers,
                        virCgroupPtr *group)
@@ -1143,7 +1122,7 @@ int virCgroupNewDriver(const char *name,
     int rc;
     virCgroupPtr rootgrp = NULL;
 
-    rc = virCgroupAppRoot(privileged, &rootgrp,
+    rc = virCgroupAppRoot(&rootgrp,
                           create, controllers);
     if (rc != 0)
         goto out;
diff --git a/src/util/vircgroup.h b/src/util/vircgroup.h
index 33f86a6..936e09b 100644
--- a/src/util/vircgroup.h
+++ b/src/util/vircgroup.h
@@ -51,7 +51,6 @@ int virCgroupNewPartition(const char *path,
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(4);
 
 int virCgroupNewDriver(const char *name,
-                       bool privileged,
                        bool create,
                        int controllers,
                        virCgroupPtr *group)
diff --git a/tests/vircgrouptest.c b/tests/vircgrouptest.c
index a806368..4f76a06 100644
--- a/tests/vircgrouptest.c
+++ b/tests/vircgrouptest.c
@@ -138,13 +138,13 @@ static int testCgroupNewForDriver(const void *args ATTRIBUTE_UNUSED)
         [VIR_CGROUP_CONTROLLER_BLKIO] = "/libvirt/lxc",
     };
 
-    if ((rv = virCgroupNewDriver("lxc", true, false, -1, &cgroup)) != -ENOENT) {
+    if ((rv = virCgroupNewDriver("lxc", false, -1, &cgroup)) != -ENOENT) {
         fprintf(stderr, "Unexpected found LXC cgroup: %d\n", -rv);
         goto cleanup;
     }
 
     /* Asking for impossible combination since CPU is co-mounted */
-    if ((rv = virCgroupNewDriver("lxc", true, true,
+    if ((rv = virCgroupNewDriver("lxc", true,
                                  (1 << VIR_CGROUP_CONTROLLER_CPU),
                                  &cgroup)) != -EINVAL) {
         fprintf(stderr, "Should not have created LXC cgroup: %d\n", -rv);
@@ -152,7 +152,7 @@ static int testCgroupNewForDriver(const void *args ATTRIBUTE_UNUSED)
     }
 
     /* Asking for impossible combination since devices is not mounted */
-    if ((rv = virCgroupNewDriver("lxc", true, true,
+    if ((rv = virCgroupNewDriver("lxc", true,
                                  (1 << VIR_CGROUP_CONTROLLER_DEVICES),
                                  &cgroup)) != -ENOENT) {
         fprintf(stderr, "Should not have created LXC cgroup: %d\n", -rv);
@@ -160,7 +160,7 @@ static int testCgroupNewForDriver(const void *args ATTRIBUTE_UNUSED)
     }
 
     /* Asking for small combination since devices is not mounted */
-    if ((rv = virCgroupNewDriver("lxc", true, true,
+    if ((rv = virCgroupNewDriver("lxc", true,
                                  (1 << VIR_CGROUP_CONTROLLER_CPU) |
                                  (1 << VIR_CGROUP_CONTROLLER_CPUACCT) |
                                  (1 << VIR_CGROUP_CONTROLLER_MEMORY),
@@ -171,7 +171,7 @@ static int testCgroupNewForDriver(const void *args ATTRIBUTE_UNUSED)
     ret = validateCgroup(cgroup, "libvirt/lxc", mountsSmall, placementSmall);
     virCgroupFree(&cgroup);
 
-    if ((rv = virCgroupNewDriver("lxc", true, true, -1, &cgroup)) != 0) {
+    if ((rv = virCgroupNewDriver("lxc", true, -1, &cgroup)) != 0) {
         fprintf(stderr, "Cannot create LXC cgroup: %d\n", -rv);
         goto cleanup;
     }
@@ -199,7 +199,7 @@ static int testCgroupNewForDriverDomain(const void *args ATTRIBUTE_UNUSED)
         [VIR_CGROUP_CONTROLLER_BLKIO] = "/libvirt/lxc/wibble",
     };
 
-    if ((rv = virCgroupNewDriver("lxc", true, false, -1, &drivercgroup)) != 0) {
+    if ((rv = virCgroupNewDriver("lxc", false, -1, &drivercgroup)) != 0) {
         fprintf(stderr, "Cannot find LXC cgroup: %d\n", -rv);
         goto cleanup;
     }
-- 
1.8.1.4




More information about the libvir-list mailing list