diff options
Diffstat (limited to 'kernel/fork.c')
| -rw-r--r-- | kernel/fork.c | 13 | 
1 files changed, 9 insertions, 4 deletions
| diff --git a/kernel/fork.c b/kernel/fork.c index ab5211b9e622..ff1cad3b7bdc 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
| @@ -304,12 +304,17 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) | |||
| 304 | } | 304 | } | 
| 305 | 305 | ||
| 306 | err = arch_dup_task_struct(tsk, orig); | 306 | err = arch_dup_task_struct(tsk, orig); | 
| 307 | if (err) | ||
| 308 | goto out; | ||
| 309 | 307 | ||
| 308 | /* | ||
| 309 | * We defer looking at err, because we will need this setup | ||
| 310 | * for the clean up path to work correctly. | ||
| 311 | */ | ||
| 310 | tsk->stack = ti; | 312 | tsk->stack = ti; | 
| 311 | |||
| 312 | setup_thread_stack(tsk, orig); | 313 | setup_thread_stack(tsk, orig); | 
| 314 | |||
| 315 | if (err) | ||
| 316 | goto out; | ||
| 317 | |||
| 313 | clear_user_return_notifier(tsk); | 318 | clear_user_return_notifier(tsk); | 
| 314 | clear_tsk_need_resched(tsk); | 319 | clear_tsk_need_resched(tsk); | 
| 315 | stackend = end_of_stack(tsk); | 320 | stackend = end_of_stack(tsk); | 
| @@ -1415,7 +1420,7 @@ static struct task_struct *copy_process(unsigned long clone_flags, | |||
| 1415 | */ | 1420 | */ | 
| 1416 | p->group_leader = p; | 1421 | p->group_leader = p; | 
| 1417 | INIT_LIST_HEAD(&p->thread_group); | 1422 | INIT_LIST_HEAD(&p->thread_group); | 
| 1418 | INIT_HLIST_HEAD(&p->task_works); | 1423 | p->task_works = NULL; | 
| 1419 | 1424 | ||
| 1420 | /* Now that the task is set up, run cgroup callbacks if | 1425 | /* Now that the task is set up, run cgroup callbacks if | 
| 1421 | * necessary. We need to run them before the task is visible | 1426 | * necessary. We need to run them before the task is visible | 
