]> git.baikalelectronics.ru Git - kernel.git/commit
cgroup: fix a subtle bug in descendant pre-order walk
authorTejun Heo <tj@kernel.org>
Fri, 24 May 2013 01:50:24 +0000 (10:50 +0900)
committerTejun Heo <tj@kernel.org>
Fri, 24 May 2013 01:50:24 +0000 (10:50 +0900)
commit1815262a0010873a11208fdcc1d0190637f6c463
tree5178e1adaa4f398d2c1367fb38633191e81764e5
parent2f9fefb6d2662352d424b170268b76fb5067bbe5
cgroup: fix a subtle bug in descendant pre-order walk

When cgroup_next_descendant_pre() initiates a walk, it checks whether
the subtree root doesn't have any children and if not returns NULL.
Later code assumes that the subtree isn't empty.  This is broken
because the subtree may become empty inbetween, which can lead to the
traversal escaping the subtree by walking to the sibling of the
subtree root.

There's no reason to have the early exit path.  Remove it along with
the later assumption that the subtree isn't empty.  This simplifies
the code a bit and fixes the subtle bug.

While at it, fix the comment of cgroup_for_each_descendant_pre() which
was incorrectly referring to ->css_offline() instead of
->css_online().

Signed-off-by: Tejun Heo <tj@kernel.org>
Reviewed-by: Michal Hocko <mhocko@suse.cz>
Cc: stable@vger.kernel.org
include/linux/cgroup.h
kernel/cgroup.c