Skip to content

Commit

Permalink
cgroup/cpuset: Don't let child cpusets restrict parent in default hie…
Browse files Browse the repository at this point in the history
…rarchy

In validate_change(), there is a check since v2.6.12 to make sure that
each of the child cpusets must be a subset of a parent cpuset.  IOW, it
allows child cpusets to restrict what changes can be made to a parent's
"cpuset.cpus". This actually violates one of the core principles of the
default hierarchy where a cgroup higher up in the hierarchy should be
able to change configuration however it sees fit as deligation breaks
down otherwise.

To address this issue, the check is now removed for the default hierarchy
to free parent cpusets from being restricted by child cpusets. The
check will still apply for legacy hierarchy.

Suggested-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Waiman Long <longman@redhat.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
  • Loading branch information
Waiman-Long authored and htejun committed Dec 13, 2021
1 parent e14da77 commit 1f1562f
Showing 1 changed file with 3 additions and 11 deletions.
14 changes: 3 additions & 11 deletions kernel/cgroup/cpuset.c
Original file line number Diff line number Diff line change
Expand Up @@ -616,19 +616,11 @@ static int validate_change(struct cpuset *cur, struct cpuset *trial)
struct cpuset *c, *par;
int ret;

rcu_read_lock();

/* Each of our child cpusets must be a subset of us */
ret = -EBUSY;
cpuset_for_each_child(c, css, cur)
if (!is_cpuset_subset(c, trial))
goto out;

/* Remaining checks don't apply to root cpuset */
ret = 0;
/* The checks don't apply to root cpuset */
if (cur == &top_cpuset)
goto out;
return 0;

rcu_read_lock();
par = parent_cs(cur);

/* On legacy hierarchy, we must be a subset of our parent cpuset. */
Expand Down

0 comments on commit 1f1562f

Please sign in to comment.