diff options
| -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 | ||
