diff options
| author | 2006-03-14 14:18:01 -0600 | |
|---|---|---|
| committer | 2006-03-14 14:18:01 -0600 | |
| commit | f33b5d783b4f56be5ace6a1c98fb5f76b2d2d07d (patch) | |
| tree | b027b5f3429d416b3da5b9195024007dab062a5e /kernel/fork.c | |
| parent | [SCSI] drivers/base/bus.c - export reprobe (diff) | |
| parent | [PATCH] Plug kdump shutdown race window (diff) | |
| download | wireguard-linux-f33b5d783b4f56be5ace6a1c98fb5f76b2d2d07d.tar.xz wireguard-linux-f33b5d783b4f56be5ace6a1c98fb5f76b2d2d07d.zip | |
Merge ../linux-2.6
Diffstat (limited to 'kernel/fork.c')
| -rw-r--r-- | kernel/fork.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/kernel/fork.c b/kernel/fork.c index fbea12d7a943..ccdfbb16c86d 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -108,8 +108,10 @@ void free_task(struct task_struct *tsk) } EXPORT_SYMBOL(free_task); -void __put_task_struct(struct task_struct *tsk) +void __put_task_struct_cb(struct rcu_head *rhp) { + struct task_struct *tsk = container_of(rhp, struct task_struct, rcu); + WARN_ON(!(tsk->exit_state & (EXIT_DEAD | EXIT_ZOMBIE))); WARN_ON(atomic_read(&tsk->usage)); WARN_ON(tsk == current); @@ -1060,6 +1062,12 @@ static task_t *copy_process(unsigned long clone_flags, p->clear_child_tid = (clone_flags & CLONE_CHILD_CLEARTID) ? child_tidptr: NULL; /* + * sigaltstack should be cleared when sharing the same VM + */ + if ((clone_flags & (CLONE_VM|CLONE_VFORK)) == CLONE_VM) + p->sas_ss_sp = p->sas_ss_size = 0; + + /* * Syscall tracing should be turned off in the child regardless * of CLONE_PTRACE. */ |
