• Tejun Heo's avatar
    cgroup: fix a subtle bug in descendant pre-order walk · 7805d000
    Tejun Heo authored
    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: default avatarTejun Heo <tj@kernel.org>
    Reviewed-by: default avatarMichal Hocko <mhocko@suse.cz>
    Cc: stable@vger.kernel.org
    7805d000
cgroup.c 143 KB