Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=dd9037a26a1e6ebec9121b4681c414dc77189a90
Commit:     dd9037a26a1e6ebec9121b4681c414dc77189a90
Parent:     e5f00f42f35e6f4699f105a3bd56874847cbf72f
Author:     Srivatsa Vaddagiri <[EMAIL PROTECTED]>
AuthorDate: Tue May 8 00:27:25 2007 -0700
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Tue May 8 11:15:05 2007 -0700

    Fix race between attach_task and cpuset_exit
    
    Currently cpuset_exit() changes the exiting task's ->cpuset pointer w/o
    taking task_lock().  This can lead to ugly races between attach_task and
    cpuset_exit.  Details of the races are described at
    http://lkml.org/lkml/2007/3/24/132.
    
    Patch below closes those races.
    
    Signed-off-by: Srivatsa Vaddagiri <[EMAIL PROTECTED]>
    Cc: Paul Jackson <[EMAIL PROTECTED]>
    Cc: Balbir Singh <[EMAIL PROTECTED]>
    Cc: Paul Menage <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 kernel/cpuset.c |    6 ++----
 1 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/kernel/cpuset.c b/kernel/cpuset.c
index d240349..bde714d 100644
--- a/kernel/cpuset.c
+++ b/kernel/cpuset.c
@@ -2200,10 +2200,6 @@ void cpuset_fork(struct task_struct *child)
  * it is holding that mutex while calling check_for_release(),
  * which calls kmalloc(), so can't be called holding callback_mutex().
  *
- * We don't need to task_lock() this reference to tsk->cpuset,
- * because tsk is already marked PF_EXITING, so attach_task() won't
- * mess with it, or task is a failed fork, never visible to attach_task.
- *
  * the_top_cpuset_hack:
  *
  *    Set the exiting tasks cpuset to the root cpuset (top_cpuset).
@@ -2242,8 +2238,10 @@ void cpuset_exit(struct task_struct *tsk)
 {
        struct cpuset *cs;
 
+       task_lock(current);
        cs = tsk->cpuset;
        tsk->cpuset = &top_cpuset;      /* the_top_cpuset_hack - see above */
+       task_unlock(current);
 
        if (notify_on_release(cs)) {
                char *pathbuf = NULL;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to