diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/fork.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/kernel/fork.c b/kernel/fork.c index 2cf74edd3295..f37980df1d58 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
@@ -448,7 +448,16 @@ void mm_release(struct task_struct *tsk, struct mm_struct *mm) | |||
448 | tsk->vfork_done = NULL; | 448 | tsk->vfork_done = NULL; |
449 | complete(vfork_done); | 449 | complete(vfork_done); |
450 | } | 450 | } |
451 | if (tsk->clear_child_tid && atomic_read(&mm->mm_users) > 1) { | 451 | |
452 | /* | ||
453 | * If we're exiting normally, clear a user-space tid field if | ||
454 | * requested. We leave this alone when dying by signal, to leave | ||
455 | * the value intact in a core dump, and to save the unnecessary | ||
456 | * trouble otherwise. Userland only wants this done for a sys_exit. | ||
457 | */ | ||
458 | if (tsk->clear_child_tid | ||
459 | && !(tsk->flags & PF_SIGNALED) | ||
460 | && atomic_read(&mm->mm_users) > 1) { | ||
452 | u32 __user * tidptr = tsk->clear_child_tid; | 461 | u32 __user * tidptr = tsk->clear_child_tid; |
453 | tsk->clear_child_tid = NULL; | 462 | tsk->clear_child_tid = NULL; |
454 | 463 | ||