cgroups: clean up cgroup_ops on initialization error

Fixes: #3836 Signed-off-by: 's avatarChristian Brauner <christian.brauner@ubuntu.com>
parent bff268e7
...@@ -3342,14 +3342,14 @@ __cgfsng_ops static int cgfsng_data_init(struct cgroup_ops *ops) ...@@ -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) 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)); cgfsng_ops = zalloc(sizeof(struct cgroup_ops));
if (!cgfsng_ops) if (!cgfsng_ops)
return ret_set_errno(NULL, ENOMEM); return ret_set_errno(NULL, ENOMEM);
cgfsng_ops->cgroup_layout = CGROUP_LAYOUT_UNKNOWN; cgfsng_ops->cgroup_layout = CGROUP_LAYOUT_UNKNOWN;
cgfsng_ops->dfd_mnt = -EBADF; cgfsng_ops->dfd_mnt = -EBADF;
if (initialize_cgroups(cgfsng_ops, conf)) if (initialize_cgroups(cgfsng_ops, conf))
return NULL; return NULL;
......
...@@ -280,6 +280,7 @@ __hidden extern struct cgroup_ops *cgroup_init(struct lxc_conf *conf); ...@@ -280,6 +280,7 @@ __hidden extern struct cgroup_ops *cgroup_init(struct lxc_conf *conf);
__hidden extern void cgroup_exit(struct cgroup_ops *ops); __hidden extern void cgroup_exit(struct cgroup_ops *ops);
define_cleanup_function(struct cgroup_ops *, cgroup_exit); 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, __hidden extern int cgroup_attach(const struct lxc_conf *conf, const char *name,
const char *lxcpath, pid_t pid); const char *lxcpath, pid_t pid);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment