fork.c (b6dff3ec5e116e3af6f537d4caedcad6b9e5082a) fork.c (f1752eec6145c97163dbce62d17cf5d928e28a27)
1/*
2 * linux/kernel/fork.c
3 *
4 * Copyright (C) 1991, 1992 Linus Torvalds
5 */
6
7/*
8 * 'fork.c' contains the help-routines for the 'fork' system call

--- 132 unchanged lines hidden (view full) ---

141EXPORT_SYMBOL(free_task);
142
143void __put_task_struct(struct task_struct *tsk)
144{
145 WARN_ON(!tsk->exit_state);
146 WARN_ON(atomic_read(&tsk->usage));
147 WARN_ON(tsk == current);
148
1/*
2 * linux/kernel/fork.c
3 *
4 * Copyright (C) 1991, 1992 Linus Torvalds
5 */
6
7/*
8 * 'fork.c' contains the help-routines for the 'fork' system call

--- 132 unchanged lines hidden (view full) ---

141EXPORT_SYMBOL(free_task);
142
143void __put_task_struct(struct task_struct *tsk)
144{
145 WARN_ON(!tsk->exit_state);
146 WARN_ON(atomic_read(&tsk->usage));
147 WARN_ON(tsk == current);
148
149 security_task_free(tsk);
150 free_uid(tsk->__temp_cred.user);
151 put_group_info(tsk->__temp_cred.group_info);
149 put_cred(tsk->cred);
152 delayacct_tsk_free(tsk);
153
154 if (!profile_handoff_task(tsk))
155 free_task(tsk);
156}
157
158/*
159 * macro override instead of weak attribute alias, to workaround

--- 804 unchanged lines hidden (view full) ---

964 goto fork_out;
965
966 rt_mutex_init_task(p);
967
968#ifdef CONFIG_PROVE_LOCKING
969 DEBUG_LOCKS_WARN_ON(!p->hardirqs_enabled);
970 DEBUG_LOCKS_WARN_ON(!p->softirqs_enabled);
971#endif
150 delayacct_tsk_free(tsk);
151
152 if (!profile_handoff_task(tsk))
153 free_task(tsk);
154}
155
156/*
157 * macro override instead of weak attribute alias, to workaround

--- 804 unchanged lines hidden (view full) ---

962 goto fork_out;
963
964 rt_mutex_init_task(p);
965
966#ifdef CONFIG_PROVE_LOCKING
967 DEBUG_LOCKS_WARN_ON(!p->hardirqs_enabled);
968 DEBUG_LOCKS_WARN_ON(!p->softirqs_enabled);
969#endif
972 p->cred = &p->__temp_cred;
973 retval = -EAGAIN;
974 if (atomic_read(&p->cred->user->processes) >=
975 p->signal->rlim[RLIMIT_NPROC].rlim_cur) {
976 if (!capable(CAP_SYS_ADMIN) && !capable(CAP_SYS_RESOURCE) &&
977 p->cred->user != current->nsproxy->user_ns->root_user)
978 goto bad_fork_free;
979 }
980
970 retval = -EAGAIN;
971 if (atomic_read(&p->cred->user->processes) >=
972 p->signal->rlim[RLIMIT_NPROC].rlim_cur) {
973 if (!capable(CAP_SYS_ADMIN) && !capable(CAP_SYS_RESOURCE) &&
974 p->cred->user != current->nsproxy->user_ns->root_user)
975 goto bad_fork_free;
976 }
977
981 atomic_inc(&p->cred->user->__count);
982 atomic_inc(&p->cred->user->processes);
983 get_group_info(p->cred->group_info);
978 retval = copy_creds(p, clone_flags);
979 if (retval < 0)
980 goto bad_fork_free;
984
985 /*
986 * If multiple threads are within copy_process(), then this check
987 * triggers too late. This doesn't hurt, the check is only there
988 * to stop root fork bombs.
989 */
990 if (nr_threads >= max_threads)
991 goto bad_fork_cleanup_count;

--- 38 unchanged lines hidden (view full) ---

1030 acct_clear_integrals(p);
1031
1032 posix_cpu_timers_init(p);
1033
1034 p->lock_depth = -1; /* -1 = no lock */
1035 do_posix_clock_monotonic_gettime(&p->start_time);
1036 p->real_start_time = p->start_time;
1037 monotonic_to_bootbased(&p->real_start_time);
981
982 /*
983 * If multiple threads are within copy_process(), then this check
984 * triggers too late. This doesn't hurt, the check is only there
985 * to stop root fork bombs.
986 */
987 if (nr_threads >= max_threads)
988 goto bad_fork_cleanup_count;

--- 38 unchanged lines hidden (view full) ---

1027 acct_clear_integrals(p);
1028
1029 posix_cpu_timers_init(p);
1030
1031 p->lock_depth = -1; /* -1 = no lock */
1032 do_posix_clock_monotonic_gettime(&p->start_time);
1033 p->real_start_time = p->start_time;
1034 monotonic_to_bootbased(&p->real_start_time);
1038#ifdef CONFIG_SECURITY
1039 p->cred->security = NULL;
1040#endif
1041 p->io_context = NULL;
1042 p->audit_context = NULL;
1043 cgroup_fork(p);
1044#ifdef CONFIG_NUMA
1045 p->mempolicy = mpol_dup(p->mempolicy);
1046 if (IS_ERR(p->mempolicy)) {
1047 retval = PTR_ERR(p->mempolicy);
1048 p->mempolicy = NULL;

--- 28 unchanged lines hidden (view full) ---

1077
1078#ifdef CONFIG_DEBUG_MUTEXES
1079 p->blocked_on = NULL; /* not blocked yet */
1080#endif
1081
1082 /* Perform scheduler related setup. Assign this task to a CPU. */
1083 sched_fork(p, clone_flags);
1084
1035 p->io_context = NULL;
1036 p->audit_context = NULL;
1037 cgroup_fork(p);
1038#ifdef CONFIG_NUMA
1039 p->mempolicy = mpol_dup(p->mempolicy);
1040 if (IS_ERR(p->mempolicy)) {
1041 retval = PTR_ERR(p->mempolicy);
1042 p->mempolicy = NULL;

--- 28 unchanged lines hidden (view full) ---

1071
1072#ifdef CONFIG_DEBUG_MUTEXES
1073 p->blocked_on = NULL; /* not blocked yet */
1074#endif
1075
1076 /* Perform scheduler related setup. Assign this task to a CPU. */
1077 sched_fork(p, clone_flags);
1078
1085 if ((retval = security_task_alloc(p)))
1086 goto bad_fork_cleanup_policy;
1087 if ((retval = audit_alloc(p)))
1079 if ((retval = audit_alloc(p)))
1088 goto bad_fork_cleanup_security;
1080 goto bad_fork_cleanup_policy;
1089 /* copy all the process information */
1090 if ((retval = copy_semundo(clone_flags, p)))
1091 goto bad_fork_cleanup_audit;
1092 if ((retval = copy_files(clone_flags, p)))
1093 goto bad_fork_cleanup_semundo;
1094 if ((retval = copy_fs(clone_flags, p)))
1095 goto bad_fork_cleanup_files;
1096 if ((retval = copy_sighand(clone_flags, p)))

--- 182 unchanged lines hidden (view full) ---

1279bad_fork_cleanup_fs:
1280 exit_fs(p); /* blocking */
1281bad_fork_cleanup_files:
1282 exit_files(p); /* blocking */
1283bad_fork_cleanup_semundo:
1284 exit_sem(p);
1285bad_fork_cleanup_audit:
1286 audit_free(p);
1081 /* copy all the process information */
1082 if ((retval = copy_semundo(clone_flags, p)))
1083 goto bad_fork_cleanup_audit;
1084 if ((retval = copy_files(clone_flags, p)))
1085 goto bad_fork_cleanup_semundo;
1086 if ((retval = copy_fs(clone_flags, p)))
1087 goto bad_fork_cleanup_files;
1088 if ((retval = copy_sighand(clone_flags, p)))

--- 182 unchanged lines hidden (view full) ---

1271bad_fork_cleanup_fs:
1272 exit_fs(p); /* blocking */
1273bad_fork_cleanup_files:
1274 exit_files(p); /* blocking */
1275bad_fork_cleanup_semundo:
1276 exit_sem(p);
1277bad_fork_cleanup_audit:
1278 audit_free(p);
1287bad_fork_cleanup_security:
1288 security_task_free(p);
1289bad_fork_cleanup_policy:
1290#ifdef CONFIG_NUMA
1291 mpol_put(p->mempolicy);
1292bad_fork_cleanup_cgroup:
1293#endif
1294 cgroup_exit(p, cgroup_callbacks_done);
1295 delayacct_tsk_free(p);
1296 if (p->binfmt)
1297 module_put(p->binfmt->module);
1298bad_fork_cleanup_put_domain:
1299 module_put(task_thread_info(p)->exec_domain->module);
1300bad_fork_cleanup_count:
1279bad_fork_cleanup_policy:
1280#ifdef CONFIG_NUMA
1281 mpol_put(p->mempolicy);
1282bad_fork_cleanup_cgroup:
1283#endif
1284 cgroup_exit(p, cgroup_callbacks_done);
1285 delayacct_tsk_free(p);
1286 if (p->binfmt)
1287 module_put(p->binfmt->module);
1288bad_fork_cleanup_put_domain:
1289 module_put(task_thread_info(p)->exec_domain->module);
1290bad_fork_cleanup_count:
1301 put_group_info(p->cred->group_info);
1302 atomic_dec(&p->cred->user->processes);
1303 free_uid(p->cred->user);
1291 put_cred(p->cred);
1304bad_fork_free:
1305 free_task(p);
1306fork_out:
1307 return ERR_PTR(retval);
1308}
1309
1310noinline struct pt_regs * __cpuinit __attribute__((weak)) idle_regs(struct pt_regs *regs)
1311{

--- 393 unchanged lines hidden ---
1292bad_fork_free:
1293 free_task(p);
1294fork_out:
1295 return ERR_PTR(retval);
1296}
1297
1298noinline struct pt_regs * __cpuinit __attribute__((weak)) idle_regs(struct pt_regs *regs)
1299{

--- 393 unchanged lines hidden ---