aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorSukadev Bhattiprolu <sukadev@us.ibm.com>2006-09-29 05:00:07 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-09-29 12:18:12 -0400
commitf400e198b2ed26ce55b22a1412ded0896e7516ac (patch)
treea3d78bfc1c20635e199fe0fe85aaa1d8792acc58 /kernel
parent959ed340f4867fda7684340625f60e211c2296d6 (diff)
[PATCH] pidspace: is_init()
This is an updated version of Eric Biederman's is_init() patch. (http://lkml.org/lkml/2006/2/6/280). It applies cleanly to 2.6.18-rc3 and replaces a few more instances of ->pid == 1 with is_init(). Further, is_init() checks pid and thus removes dependency on Eric's other patches for now. Eric's original description: There are a lot of places in the kernel where we test for init because we give it special properties. Most significantly init must not die. This results in code all over the kernel test ->pid == 1. Introduce is_init to capture this case. With multiple pid spaces for all of the cases affected we are looking for only the first process on the system, not some other process that has pid == 1. Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Signed-off-by: Sukadev Bhattiprolu <sukadev@us.ibm.com> Cc: Dave Hansen <haveblue@us.ibm.com> Cc: Serge Hallyn <serue@us.ibm.com> Cc: Cedric Le Goater <clg@fr.ibm.com> Cc: <lxc-devel@lists.sourceforge.net> Acked-by: Paul Mackerras <paulus@samba.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/capability.c2
-rw-r--r--kernel/cpuset.c2
-rw-r--r--kernel/exit.c2
-rw-r--r--kernel/kexec.c2
-rw-r--r--kernel/ptrace.c1
-rw-r--r--kernel/sysctl.c2
6 files changed, 6 insertions, 5 deletions
diff --git a/kernel/capability.c b/kernel/capability.c
index c7685ad00a97..edb845a6e84a 100644
--- a/kernel/capability.c
+++ b/kernel/capability.c
@@ -133,7 +133,7 @@ static inline int cap_set_all(kernel_cap_t *effective,
133 int found = 0; 133 int found = 0;
134 134
135 do_each_thread(g, target) { 135 do_each_thread(g, target) {
136 if (target == current || target->pid == 1) 136 if (target == current || is_init(target))
137 continue; 137 continue;
138 found = 1; 138 found = 1;
139 if (security_capset_check(target, effective, inheritable, 139 if (security_capset_check(target, effective, inheritable,
diff --git a/kernel/cpuset.c b/kernel/cpuset.c
index 1b32c2c04c15..584bb4e6c042 100644
--- a/kernel/cpuset.c
+++ b/kernel/cpuset.c
@@ -240,7 +240,7 @@ static struct super_block *cpuset_sb;
240 * A cpuset can only be deleted if both its 'count' of using tasks 240 * A cpuset can only be deleted if both its 'count' of using tasks
241 * is zero, and its list of 'children' cpusets is empty. Since all 241 * is zero, and its list of 'children' cpusets is empty. Since all
242 * tasks in the system use _some_ cpuset, and since there is always at 242 * tasks in the system use _some_ cpuset, and since there is always at
243 * least one task in the system (init, pid == 1), therefore, top_cpuset 243 * least one task in the system (init), therefore, top_cpuset
244 * always has either children cpusets and/or using tasks. So we don't 244 * always has either children cpusets and/or using tasks. So we don't
245 * need a special hack to ensure that top_cpuset cannot be deleted. 245 * need a special hack to ensure that top_cpuset cannot be deleted.
246 * 246 *
diff --git a/kernel/exit.c b/kernel/exit.c
index 4b6fb054b25d..9961192d6055 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -219,7 +219,7 @@ static int will_become_orphaned_pgrp(int pgrp, struct task_struct *ignored_task)
219 do_each_task_pid(pgrp, PIDTYPE_PGID, p) { 219 do_each_task_pid(pgrp, PIDTYPE_PGID, p) {
220 if (p == ignored_task 220 if (p == ignored_task
221 || p->exit_state 221 || p->exit_state
222 || p->real_parent->pid == 1) 222 || is_init(p->real_parent))
223 continue; 223 continue;
224 if (process_group(p->real_parent) != pgrp 224 if (process_group(p->real_parent) != pgrp
225 && p->real_parent->signal->session == p->signal->session) { 225 && p->real_parent->signal->session == p->signal->session) {
diff --git a/kernel/kexec.c b/kernel/kexec.c
index 50087ecf337e..37cad75cf494 100644
--- a/kernel/kexec.c
+++ b/kernel/kexec.c
@@ -40,7 +40,7 @@ struct resource crashk_res = {
40 40
41int kexec_should_crash(struct task_struct *p) 41int kexec_should_crash(struct task_struct *p)
42{ 42{
43 if (in_interrupt() || !p->pid || p->pid == 1 || panic_on_oops) 43 if (in_interrupt() || !p->pid || is_init(p) || panic_on_oops)
44 return 1; 44 return 1;
45 return 0; 45 return 0;
46} 46}
diff --git a/kernel/ptrace.c b/kernel/ptrace.c
index 8aad0331d82e..4d50e06fd745 100644
--- a/kernel/ptrace.c
+++ b/kernel/ptrace.c
@@ -440,6 +440,7 @@ struct task_struct *ptrace_get_task_struct(pid_t pid)
440 child = find_task_by_pid(pid); 440 child = find_task_by_pid(pid);
441 if (child) 441 if (child)
442 get_task_struct(child); 442 get_task_struct(child);
443
443 read_unlock(&tasklist_lock); 444 read_unlock(&tasklist_lock);
444 if (!child) 445 if (!child)
445 return ERR_PTR(-ESRCH); 446 return ERR_PTR(-ESRCH);
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 8bfa7d117c54..9535a3839930 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -1915,7 +1915,7 @@ int proc_dointvec_bset(ctl_table *table, int write, struct file *filp,
1915 return -EPERM; 1915 return -EPERM;
1916 } 1916 }
1917 1917
1918 op = (current->pid == 1) ? OP_SET : OP_AND; 1918 op = is_init(current) ? OP_SET : OP_AND;
1919 return do_proc_dointvec(table,write,filp,buffer,lenp,ppos, 1919 return do_proc_dointvec(table,write,filp,buffer,lenp,ppos,
1920 do_proc_dointvec_bset_conv,&op); 1920 do_proc_dointvec_bset_conv,&op);
1921} 1921}