• Tejun Heo's avatar
    threadgroup: extend threadgroup_lock() to cover exit and exec · 77e4ef99
    Tejun Heo authored
    threadgroup_lock() protected only protected against new addition to
    the threadgroup, which was inherently somewhat incomplete and
    problematic for its only user cgroup.  On-going migration could race
    against exec and exit leading to interesting problems - the symmetry
    between various attach methods, task exiting during method execution,
    ->exit() racing against attach methods, migrating task switching basic
    properties during exec and so on.
    
    This patch extends threadgroup_lock() such that it protects against
    all three threadgroup altering operations - fork, exit and exec.  For
    exit, threadgroup_change_begin/end() calls are added to exit_signals
    around assertion of PF_EXITING.  For exec, threadgroup_[un]lock() are
    updated to also grab and release cred_guard_mutex.
    
    With this change, threadgroup_lock() guarantees that the target
    threadgroup will remain stable - no new task will be added, no new
    PF_EXITING will be set and exec won't happen.
    
    The next patch will update cgroup so that it can take full advantage
    of this change.
    
    -v2: beefed up comment as suggested by Frederic.
    
    -v3: narrowed scope of protection in exit path as suggested by
         Frederic.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Reviewed-by: default avatarKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Acked-by: default avatarLi Zefan <lizf@cn.fujitsu.com>
    Acked-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Paul Menage <paul@paulmenage.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    77e4ef99
signal.c 83.1 KB