Commit f1774f46 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-4.10-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup

Pull cgroup fix from Tejun Heo:
 "The cgroup creation path was getting the order of operations wrong and
  exposing cgroups which don't have their names set yet to controllers
  which can lead to NULL derefs.

  This contains the fix for the bug"

* 'for-4.10-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup:
  cgroup: don't online subsystems before cgroup_name/path() are operational
parents 298a2d87 07cd1294
...@@ -5221,6 +5221,11 @@ static struct cgroup_subsys_state *css_create(struct cgroup *cgrp, ...@@ -5221,6 +5221,11 @@ static struct cgroup_subsys_state *css_create(struct cgroup *cgrp,
return ERR_PTR(err); return ERR_PTR(err);
} }
/*
* The returned cgroup is fully initialized including its control mask, but
* it isn't associated with its kernfs_node and doesn't have the control
* mask applied.
*/
static struct cgroup *cgroup_create(struct cgroup *parent) static struct cgroup *cgroup_create(struct cgroup *parent)
{ {
struct cgroup_root *root = parent->root; struct cgroup_root *root = parent->root;
...@@ -5288,11 +5293,6 @@ static struct cgroup *cgroup_create(struct cgroup *parent) ...@@ -5288,11 +5293,6 @@ static struct cgroup *cgroup_create(struct cgroup *parent)
cgroup_propagate_control(cgrp); cgroup_propagate_control(cgrp);
/* @cgrp doesn't have dir yet so the following will only create csses */
ret = cgroup_apply_control_enable(cgrp);
if (ret)
goto out_destroy;
return cgrp; return cgrp;
out_cancel_ref: out_cancel_ref:
...@@ -5300,9 +5300,6 @@ static struct cgroup *cgroup_create(struct cgroup *parent) ...@@ -5300,9 +5300,6 @@ static struct cgroup *cgroup_create(struct cgroup *parent)
out_free_cgrp: out_free_cgrp:
kfree(cgrp); kfree(cgrp);
return ERR_PTR(ret); return ERR_PTR(ret);
out_destroy:
cgroup_destroy_locked(cgrp);
return ERR_PTR(ret);
} }
static int cgroup_mkdir(struct kernfs_node *parent_kn, const char *name, static int cgroup_mkdir(struct kernfs_node *parent_kn, const char *name,
......
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