]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
cgroups: ensure leaf cgroup is correctly pruned on creation failure
authorChristian Brauner <christian.brauner@ubuntu.com>
Wed, 17 Feb 2021 08:28:46 +0000 (09:28 +0100)
committerChristian Brauner <christian.brauner@ubuntu.com>
Wed, 17 Feb 2021 08:29:04 +0000 (09:29 +0100)
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
src/lxc/cgroups/cgfsng.c

index 8a9f584e21f50c78d9943914bcca29b4470a3a84..396d81675342306c43c7468f486524c9c743d88e 100644 (file)
@@ -1159,8 +1159,8 @@ static bool cgroup_tree_create(struct cgroup_ops *ops, struct lxc_conf *conf,
        return true;
 }
 
-static void cgroup_tree_leaf_remove(struct hierarchy *h, const char *path_prune,
-                                   bool payload)
+static void cgroup_tree_prune_leaf(struct hierarchy *h, const char *path_prune,
+                                  bool payload)
 {
        int ret;
 
@@ -1357,9 +1357,9 @@ __cgfsng_ops static bool cgfsng_monitor_create(struct cgroup_ops *ops, struct lx
                                continue;
 
                        DEBUG("Failed to create cgroup \"%s\"", maybe_empty(ops->hierarchies[i]->monitor_full_path));
-                       for (int j = 0; j < i; j++)
-                               cgroup_tree_leaf_remove(ops->hierarchies[j],
-                                                       monitor_cgroup, false);
+                       for (int j = 0; j <= i; j++)
+                               cgroup_tree_prune_leaf(ops->hierarchies[j],
+                                                      monitor_cgroup, false);
 
                        idx++;
                        break;
@@ -1456,10 +1456,10 @@ __cgfsng_ops static bool cgfsng_payload_create(struct cgroup_ops *ops, struct lx
                                continue;
 
                        DEBUG("Failed to create cgroup \"%s\"", ops->hierarchies[i]->container_full_path ?: "(null)");
-                       for (int j = 0; j < i; j++)
-                               cgroup_tree_leaf_remove(ops->hierarchies[j],
-                                                       limiting_cgroup ?: container_cgroup,
-                                                       true);
+                       for (int j = 0; j <= i; j++)
+                               cgroup_tree_prune_leaf(ops->hierarchies[j],
+                                                      limiting_cgroup ?: container_cgroup,
+                                                      true);
 
                        idx++;
                        break;