From e3d78fdc8cbda0d1f5f21cf10d1d9157d914079a Mon Sep 17 00:00:00 2001 From: Christian Brauner Date: Tue, 11 May 2021 09:05:03 +0200 Subject: [PATCH] cgroups: clean up cgroup_ops on initialization error Fixes: #3836 Signed-off-by: Christian Brauner --- src/lxc/cgroups/cgfsng.c | 6 +++--- src/lxc/cgroups/cgroup.h | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c index 9e1ece5ca..078d47609 100644 --- a/src/lxc/cgroups/cgfsng.c +++ b/src/lxc/cgroups/cgfsng.c @@ -3342,14 +3342,14 @@ __cgfsng_ops static int cgfsng_data_init(struct cgroup_ops *ops) struct cgroup_ops *cgroup_ops_init(struct lxc_conf *conf) { - __do_free struct cgroup_ops *cgfsng_ops = NULL; + __cleanup_cgroup_ops struct cgroup_ops *cgfsng_ops = NULL; cgfsng_ops = zalloc(sizeof(struct cgroup_ops)); if (!cgfsng_ops) return ret_set_errno(NULL, ENOMEM); - cgfsng_ops->cgroup_layout = CGROUP_LAYOUT_UNKNOWN; - cgfsng_ops->dfd_mnt = -EBADF; + cgfsng_ops->cgroup_layout = CGROUP_LAYOUT_UNKNOWN; + cgfsng_ops->dfd_mnt = -EBADF; if (initialize_cgroups(cgfsng_ops, conf)) return NULL; diff --git a/src/lxc/cgroups/cgroup.h b/src/lxc/cgroups/cgroup.h index abaac1124..cb2a9751a 100644 --- a/src/lxc/cgroups/cgroup.h +++ b/src/lxc/cgroups/cgroup.h @@ -280,6 +280,7 @@ __hidden extern struct cgroup_ops *cgroup_init(struct lxc_conf *conf); __hidden extern void cgroup_exit(struct cgroup_ops *ops); define_cleanup_function(struct cgroup_ops *, cgroup_exit); +#define __cleanup_cgroup_ops call_cleaner(cgroup_exit) __hidden extern int cgroup_attach(const struct lxc_conf *conf, const char *name, const char *lxcpath, pid_t pid); -- 2.47.2