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