The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxc/pull/3271

This e-mail was sent by the LXC bot, direct replies will not reach the author
unless they happen to be subscribed to this list.

=== Description (from pull-request) ===
Link: https://discuss.linuxcontainers.org/t/lxc-cgroup-pattern-is-not-being-honored
Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com>
From d6bdd1823a61c5b56c6ee9875b719c5b27096adb Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brau...@ubuntu.com>
Date: Thu, 27 Feb 2020 23:02:31 +0100
Subject: [PATCH] cgroups: honor lxc.cgroup.pattern if set explicitly II

Link: 
https://discuss.linuxcontainers.org/t/lxc-cgroup-pattern-is-not-being-honored
Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com>
---
 src/lxc/cgroups/cgfsng.c | 27 +++++++++++++++------------
 src/lxc/cgroups/cgroup.h |  2 ++
 src/lxc/initutils.c      | 22 ++++++++--------------
 3 files changed, 25 insertions(+), 26 deletions(-)

diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c
index 5dfffcd92a..7677567cbf 100644
--- a/src/lxc/cgroups/cgfsng.c
+++ b/src/lxc/cgroups/cgfsng.c
@@ -1223,21 +1223,14 @@ static void cgroup_remove_leaf(struct hierarchy *h, 
bool payload)
 
        if (payload) {
                __lxc_unused __do_close_prot_errno int fd = 
move_fd(h->cgfd_con);
-               h->cgfd_con = -EBADF;
-               full_path = h->container_full_path;
+               full_path = move_ptr(h->container_full_path);
        } else {
                __lxc_unused __do_close_prot_errno int fd = 
move_fd(h->cgfd_mon);
-               h->cgfd_mon = -EBADF;
-               full_path = h->monitor_full_path;
+               full_path = move_ptr(h->monitor_full_path);
        }
 
-       if (rmdir(full_path))
+       if (full_path && rmdir(full_path))
                SYSWARN("Failed to rmdir(\"%s\") cgroup", full_path);
-
-       if (payload)
-               h->container_full_path = NULL;
-       else
-               h->monitor_full_path = NULL;
 }
 
 __cgfsng_ops static inline bool cgfsng_monitor_create(struct cgroup_ops *ops,
@@ -1273,10 +1266,15 @@ __cgfsng_ops static inline bool 
cgfsng_monitor_create(struct cgroup_ops *ops,
                                             CGROUP_CREATE_RETRY, NULL);
        } else if (ops->cgroup_pattern) {
                __cgroup_tree = lxc_string_replace("%n", handler->name, 
ops->cgroup_pattern);
+               if (!__cgroup_tree)
+                       return ret_set_errno(false, ENOMEM);
+
                cgroup_tree = __cgroup_tree;
-               monitor_cgroup = must_concat(&len, cgroup_tree,
+               monitor_cgroup = must_concat(&len, cgroup_tree, "/",
+                                            DEFAULT_MONITOR_CGROUP,
                                             CGROUP_CREATE_RETRY, NULL);
        } else {
+               cgroup_tree = NULL;
                monitor_cgroup = must_concat(&len, 
DEFAULT_MONITOR_CGROUP_PREFIX,
                                             handler->name,
                                             CGROUP_CREATE_RETRY, NULL);
@@ -1347,10 +1345,15 @@ __cgfsng_ops static inline bool 
cgfsng_payload_create(struct cgroup_ops *ops,
                                             CGROUP_CREATE_RETRY, NULL);
        } else if (ops->cgroup_pattern) {
                __cgroup_tree = lxc_string_replace("%n", handler->name, 
ops->cgroup_pattern);
+               if (!__cgroup_tree)
+                       return ret_set_errno(false, ENOMEM);
+
                cgroup_tree = __cgroup_tree;
-               container_cgroup = must_concat(&len, cgroup_tree,
+               container_cgroup = must_concat(&len, cgroup_tree, "/",
+                                              DEFAULT_PAYLOAD_CGROUP,
                                               CGROUP_CREATE_RETRY, NULL);
        } else {
+               cgroup_tree = NULL;
                container_cgroup = must_concat(&len, 
DEFAULT_PAYLOAD_CGROUP_PREFIX,
                                             handler->name,
                                             CGROUP_CREATE_RETRY, NULL);
diff --git a/src/lxc/cgroups/cgroup.h b/src/lxc/cgroups/cgroup.h
index 32692fd711..309f31fae7 100644
--- a/src/lxc/cgroups/cgroup.h
+++ b/src/lxc/cgroups/cgroup.h
@@ -12,6 +12,8 @@
 #define DEFAULT_CGROUP_MOUNTPOINT "/sys/fs/cgroup"
 #define DEFAULT_PAYLOAD_CGROUP_PREFIX "lxc.payload."
 #define DEFAULT_MONITOR_CGROUP_PREFIX "lxc.monitor."
+#define DEFAULT_PAYLOAD_CGROUP "payload"
+#define DEFAULT_MONITOR_CGROUP "monitor"
 #define CGROUP_CREATE_RETRY "-NNNN"
 #define CGROUP_CREATE_RETRY_LEN (STRLITERALLEN(CGROUP_CREATE_RETRY))
 #define CGROUP_PIVOT "lxc.pivot"
diff --git a/src/lxc/initutils.c b/src/lxc/initutils.c
index e5d4523072..5549c2e8f7 100644
--- a/src/lxc/initutils.c
+++ b/src/lxc/initutils.c
@@ -169,8 +169,7 @@ const char *lxc_global_config_value(const char *option_name)
                                free(user_lxc_path);
                                user_lxc_path = 
copy_global_config_value(slider1);
                                remove_trailing_slashes(user_lxc_path);
-                               values[i] = user_lxc_path;
-                               user_lxc_path = NULL;
+                               values[i] = move_ptr(user_lxc_path);
                                goto out;
                        }
 
@@ -182,19 +181,14 @@ const char *lxc_global_config_value(const char 
*option_name)
        /* could not find value, use default */
        if (strcmp(option_name, "lxc.lxcpath") == 0) {
                remove_trailing_slashes(user_lxc_path);
-               values[i] = user_lxc_path;
-               user_lxc_path = NULL;
-       }
-       else if (strcmp(option_name, "lxc.default_config") == 0) {
-               values[i] = user_default_config_path;
-               user_default_config_path = NULL;
-       }
-       else if (strcmp(option_name, "lxc.cgroup.pattern") == 0) {
-               values[i] = user_cgroup_pattern;
-               user_cgroup_pattern = NULL;
-       }
-       else
+               values[i] = move_ptr(user_lxc_path);
+       } else if (strcmp(option_name, "lxc.default_config") == 0) {
+               values[i] = move_ptr(user_default_config_path);
+       } else if (strcmp(option_name, "lxc.cgroup.pattern") == 0) {
+               values[i] = move_ptr(user_cgroup_pattern);
+       } else {
                values[i] = (*ptr)[1];
+       }
 
        /* special case: if default value is NULL,
         * and there is no config, don't view that
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to