aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/fork.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/fork.c')
-rw-r--r--kernel/fork.c27
1 files changed, 1 insertions, 26 deletions
diff --git a/kernel/fork.c b/kernel/fork.c
index b0ec34abc0bb..ce2666f84d85 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -863,7 +863,7 @@ static int copy_signal(unsigned long clone_flags, struct task_struct *tsk)
863 if (clone_flags & CLONE_THREAD) 863 if (clone_flags & CLONE_THREAD)
864 return 0; 864 return 0;
865 865
866 sig = kmem_cache_alloc(signal_cachep, GFP_KERNEL); 866 sig = kmem_cache_zalloc(signal_cachep, GFP_KERNEL);
867 tsk->signal = sig; 867 tsk->signal = sig;
868 if (!sig) 868 if (!sig)
869 return -ENOMEM; 869 return -ENOMEM;
@@ -871,46 +871,21 @@ static int copy_signal(unsigned long clone_flags, struct task_struct *tsk)
871 atomic_set(&sig->count, 1); 871 atomic_set(&sig->count, 1);
872 atomic_set(&sig->live, 1); 872 atomic_set(&sig->live, 1);
873 init_waitqueue_head(&sig->wait_chldexit); 873 init_waitqueue_head(&sig->wait_chldexit);
874 sig->flags = 0;
875 if (clone_flags & CLONE_NEWPID) 874 if (clone_flags & CLONE_NEWPID)
876 sig->flags |= SIGNAL_UNKILLABLE; 875 sig->flags |= SIGNAL_UNKILLABLE;
877 sig->group_exit_code = 0;
878 sig->group_exit_task = NULL;
879 sig->group_stop_count = 0;
880 sig->curr_target = tsk; 876 sig->curr_target = tsk;
881 init_sigpending(&sig->shared_pending); 877 init_sigpending(&sig->shared_pending);
882 INIT_LIST_HEAD(&sig->posix_timers); 878 INIT_LIST_HEAD(&sig->posix_timers);
883 879
884 hrtimer_init(&sig->real_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); 880 hrtimer_init(&sig->real_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
885 sig->it_real_incr.tv64 = 0;
886 sig->real_timer.function = it_real_fn; 881 sig->real_timer.function = it_real_fn;
887 882
888 sig->leader = 0; /* session leadership doesn't inherit */
889 sig->tty_old_pgrp = NULL;
890 sig->tty = NULL;
891
892 sig->utime = sig->stime = sig->cutime = sig->cstime = cputime_zero;
893 sig->gtime = cputime_zero;
894 sig->cgtime = cputime_zero;
895#ifndef CONFIG_VIRT_CPU_ACCOUNTING
896 sig->prev_utime = sig->prev_stime = cputime_zero;
897#endif
898 sig->nvcsw = sig->nivcsw = sig->cnvcsw = sig->cnivcsw = 0;
899 sig->min_flt = sig->maj_flt = sig->cmin_flt = sig->cmaj_flt = 0;
900 sig->inblock = sig->oublock = sig->cinblock = sig->coublock = 0;
901 sig->maxrss = sig->cmaxrss = 0;
902 task_io_accounting_init(&sig->ioac);
903 sig->sum_sched_runtime = 0;
904 taskstats_tgid_init(sig);
905
906 task_lock(current->group_leader); 883 task_lock(current->group_leader);
907 memcpy(sig->rlim, current->signal->rlim, sizeof sig->rlim); 884 memcpy(sig->rlim, current->signal->rlim, sizeof sig->rlim);
908 task_unlock(current->group_leader); 885 task_unlock(current->group_leader);
909 886
910 posix_cpu_timers_init_group(sig); 887 posix_cpu_timers_init_group(sig);
911 888
912 acct_init_pacct(&sig->pacct);
913
914 tty_audit_fork(sig); 889 tty_audit_fork(sig);
915 890
916 sig->oom_adj = current->signal->oom_adj; 891 sig->oom_adj = current->signal->oom_adj;