Skip to content
  • Eric W. Biederman's avatar
    cgroupns: Fix the locking in copy_cgroup_ns · 7bd88308
    Eric W. Biederman authored
    If "clone(CLONE_NEWCGROUP...)" is called it results in a nice lockdep
    valid splat.
    
    In __cgroup_proc_write the lock ordering is:
         cgroup_mutex -- through cgroup_kn_lock_live
         cgroup_threadgroup_rwsem
    
    In copy_process the guts of clone the lock ordering is:
         cgroup_threadgroup_rwsem -- through threadgroup_change_begin
         cgroup_mutex -- through copy_namespaces -- copy_cgroup_ns
    
    lockdep reports some a different call chains for the first ordering of
    cgroup_mutex and cgroup_threadgroup_rwsem but it is harder to trace.
    This is most definitely deadlock potential under the right
    circumstances.
    
    Fix this by by skipping the cgroup_mutex and making the locking in
    copy_cgroup_ns mirror the locking in cgroup_post_fork which also runs
    during fork under the cgroup_threadgroup_rwsem.
    
    Cc: stable@vger.kernel.org
    Fixes: a79a908f
    
     ("cgroup: introduce cgroup namespaces")
    Signed-off-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    7bd88308