aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/alpha/mm/fault.c2
-rw-r--r--arch/arm/mm/fault.c2
-rw-r--r--arch/arm26/mm/fault.c2
-rw-r--r--arch/i386/lib/usercopy.c2
-rw-r--r--arch/i386/mm/fault.c2
-rw-r--r--arch/ia64/mm/fault.c2
-rw-r--r--arch/m32r/mm/fault.c2
-rw-r--r--arch/m68k/mm/fault.c2
-rw-r--r--arch/mips/mm/fault.c2
-rw-r--r--arch/powerpc/mm/fault.c2
-rw-r--r--arch/powerpc/platforms/pseries/ras.c2
-rw-r--r--arch/ppc/kernel/traps.c2
-rw-r--r--arch/ppc/mm/fault.c2
-rw-r--r--arch/s390/mm/fault.c2
-rw-r--r--arch/sh/mm/fault.c2
-rw-r--r--arch/sh64/mm/fault.c6
-rw-r--r--arch/um/kernel/trap.c2
-rw-r--r--arch/x86_64/mm/fault.c4
-rw-r--r--arch/xtensa/mm/fault.c2
-rw-r--r--drivers/char/sysrq.c2
-rw-r--r--include/linux/sched.h10
-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
-rw-r--r--mm/oom_kill.c2
-rw-r--r--security/commoncap.c2
29 files changed, 41 insertions, 30 deletions
diff --git a/arch/alpha/mm/fault.c b/arch/alpha/mm/fault.c
index 622dabd84680..8871529a34e2 100644
--- a/arch/alpha/mm/fault.c
+++ b/arch/alpha/mm/fault.c
@@ -193,7 +193,7 @@ do_page_fault(unsigned long address, unsigned long mmcsr,
193 /* We ran out of memory, or some other thing happened to us that 193 /* We ran out of memory, or some other thing happened to us that
194 made us unable to handle the page fault gracefully. */ 194 made us unable to handle the page fault gracefully. */
195 out_of_memory: 195 out_of_memory:
196 if (current->pid == 1) { 196 if (is_init(current)) {
197 yield(); 197 yield();
198 down_read(&mm->mmap_sem); 198 down_read(&mm->mmap_sem);
199 goto survive; 199 goto survive;
diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c
index a5b33ff3924e..5e658a874498 100644
--- a/arch/arm/mm/fault.c
+++ b/arch/arm/mm/fault.c
@@ -198,7 +198,7 @@ survive:
198 return fault; 198 return fault;
199 } 199 }
200 200
201 if (tsk->pid != 1) 201 if (!is_init(tsk))
202 goto out; 202 goto out;
203 203
204 /* 204 /*
diff --git a/arch/arm26/mm/fault.c b/arch/arm26/mm/fault.c
index a7c4cc922095..a1f6d8a9cc32 100644
--- a/arch/arm26/mm/fault.c
+++ b/arch/arm26/mm/fault.c
@@ -185,7 +185,7 @@ survive:
185 } 185 }
186 186
187 fault = -3; /* out of memory */ 187 fault = -3; /* out of memory */
188 if (tsk->pid != 1) 188 if (!is_init(tsk))
189 goto out; 189 goto out;
190 190
191 /* 191 /*
diff --git a/arch/i386/lib/usercopy.c b/arch/i386/lib/usercopy.c
index efc7e7d5f4d0..08502fc6d0cb 100644
--- a/arch/i386/lib/usercopy.c
+++ b/arch/i386/lib/usercopy.c
@@ -739,7 +739,7 @@ survive:
739 retval = get_user_pages(current, current->mm, 739 retval = get_user_pages(current, current->mm,
740 (unsigned long )to, 1, 1, 0, &pg, NULL); 740 (unsigned long )to, 1, 1, 0, &pg, NULL);
741 741
742 if (retval == -ENOMEM && current->pid == 1) { 742 if (retval == -ENOMEM && is_init(current)) {
743 up_read(&current->mm->mmap_sem); 743 up_read(&current->mm->mmap_sem);
744 blk_congestion_wait(WRITE, HZ/50); 744 blk_congestion_wait(WRITE, HZ/50);
745 goto survive; 745 goto survive;
diff --git a/arch/i386/mm/fault.c b/arch/i386/mm/fault.c
index 50d8617391dd..2581575786c1 100644
--- a/arch/i386/mm/fault.c
+++ b/arch/i386/mm/fault.c
@@ -589,7 +589,7 @@ no_context:
589 */ 589 */
590out_of_memory: 590out_of_memory:
591 up_read(&mm->mmap_sem); 591 up_read(&mm->mmap_sem);
592 if (tsk->pid == 1) { 592 if (is_init(tsk)) {
593 yield(); 593 yield();
594 down_read(&mm->mmap_sem); 594 down_read(&mm->mmap_sem);
595 goto survive; 595 goto survive;
diff --git a/arch/ia64/mm/fault.c b/arch/ia64/mm/fault.c
index d8b1b4ac7f26..59f3ab937615 100644
--- a/arch/ia64/mm/fault.c
+++ b/arch/ia64/mm/fault.c
@@ -280,7 +280,7 @@ ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *re
280 280
281 out_of_memory: 281 out_of_memory:
282 up_read(&mm->mmap_sem); 282 up_read(&mm->mmap_sem);
283 if (current->pid == 1) { 283 if (is_init(current)) {
284 yield(); 284 yield();
285 down_read(&mm->mmap_sem); 285 down_read(&mm->mmap_sem);
286 goto survive; 286 goto survive;
diff --git a/arch/m32r/mm/fault.c b/arch/m32r/mm/fault.c
index dc18a33eefef..8d5f551b5754 100644
--- a/arch/m32r/mm/fault.c
+++ b/arch/m32r/mm/fault.c
@@ -299,7 +299,7 @@ no_context:
299 */ 299 */
300out_of_memory: 300out_of_memory:
301 up_read(&mm->mmap_sem); 301 up_read(&mm->mmap_sem);
302 if (tsk->pid == 1) { 302 if (is_init(tsk)) {
303 yield(); 303 yield();
304 down_read(&mm->mmap_sem); 304 down_read(&mm->mmap_sem);
305 goto survive; 305 goto survive;
diff --git a/arch/m68k/mm/fault.c b/arch/m68k/mm/fault.c
index 5e2d87c10c87..911f2ce3f53e 100644
--- a/arch/m68k/mm/fault.c
+++ b/arch/m68k/mm/fault.c
@@ -181,7 +181,7 @@ good_area:
181 */ 181 */
182out_of_memory: 182out_of_memory:
183 up_read(&mm->mmap_sem); 183 up_read(&mm->mmap_sem);
184 if (current->pid == 1) { 184 if (is_init(current)) {
185 yield(); 185 yield();
186 down_read(&mm->mmap_sem); 186 down_read(&mm->mmap_sem);
187 goto survive; 187 goto survive;
diff --git a/arch/mips/mm/fault.c b/arch/mips/mm/fault.c
index a4f8c45c4e8e..8423d8590779 100644
--- a/arch/mips/mm/fault.c
+++ b/arch/mips/mm/fault.c
@@ -171,7 +171,7 @@ no_context:
171 */ 171 */
172out_of_memory: 172out_of_memory:
173 up_read(&mm->mmap_sem); 173 up_read(&mm->mmap_sem);
174 if (tsk->pid == 1) { 174 if (is_init(tsk)) {
175 yield(); 175 yield();
176 down_read(&mm->mmap_sem); 176 down_read(&mm->mmap_sem);
177 goto survive; 177 goto survive;
diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c
index 77953f41d754..e8fa50624b70 100644
--- a/arch/powerpc/mm/fault.c
+++ b/arch/powerpc/mm/fault.c
@@ -386,7 +386,7 @@ bad_area_nosemaphore:
386 */ 386 */
387out_of_memory: 387out_of_memory:
388 up_read(&mm->mmap_sem); 388 up_read(&mm->mmap_sem);
389 if (current->pid == 1) { 389 if (is_init(current)) {
390 yield(); 390 yield();
391 down_read(&mm->mmap_sem); 391 down_read(&mm->mmap_sem);
392 goto survive; 392 goto survive;
diff --git a/arch/powerpc/platforms/pseries/ras.c b/arch/powerpc/platforms/pseries/ras.c
index 903115d67fdc..311ed1993fc0 100644
--- a/arch/powerpc/platforms/pseries/ras.c
+++ b/arch/powerpc/platforms/pseries/ras.c
@@ -337,7 +337,7 @@ static int recover_mce(struct pt_regs *regs, struct rtas_error_log * err)
337 err->disposition == RTAS_DISP_NOT_RECOVERED && 337 err->disposition == RTAS_DISP_NOT_RECOVERED &&
338 err->target == RTAS_TARGET_MEMORY && 338 err->target == RTAS_TARGET_MEMORY &&
339 err->type == RTAS_TYPE_ECC_UNCORR && 339 err->type == RTAS_TYPE_ECC_UNCORR &&
340 !(current->pid == 0 || current->pid == 1)) { 340 !(current->pid == 0 || is_init(current))) {
341 /* Kill off a user process with an ECC error */ 341 /* Kill off a user process with an ECC error */
342 printk(KERN_ERR "MCE: uncorrectable ecc error for pid %d\n", 342 printk(KERN_ERR "MCE: uncorrectable ecc error for pid %d\n",
343 current->pid); 343 current->pid);
diff --git a/arch/ppc/kernel/traps.c b/arch/ppc/kernel/traps.c
index d7a433049b48..aafc8e8893d1 100644
--- a/arch/ppc/kernel/traps.c
+++ b/arch/ppc/kernel/traps.c
@@ -119,7 +119,7 @@ void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr)
119 * generate the same exception over and over again and we get 119 * generate the same exception over and over again and we get
120 * nowhere. Better to kill it and let the kernel panic. 120 * nowhere. Better to kill it and let the kernel panic.
121 */ 121 */
122 if (current->pid == 1) { 122 if (is_init(current)) {
123 __sighandler_t handler; 123 __sighandler_t handler;
124 124
125 spin_lock_irq(&current->sighand->siglock); 125 spin_lock_irq(&current->sighand->siglock);
diff --git a/arch/ppc/mm/fault.c b/arch/ppc/mm/fault.c
index bc776beb3136..465f451f3bc3 100644
--- a/arch/ppc/mm/fault.c
+++ b/arch/ppc/mm/fault.c
@@ -291,7 +291,7 @@ bad_area:
291 */ 291 */
292out_of_memory: 292out_of_memory:
293 up_read(&mm->mmap_sem); 293 up_read(&mm->mmap_sem);
294 if (current->pid == 1) { 294 if (is_init(current)) {
295 yield(); 295 yield();
296 down_read(&mm->mmap_sem); 296 down_read(&mm->mmap_sem);
297 goto survive; 297 goto survive;
diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c
index f2b9a84dc2bf..9c3c19fe62fc 100644
--- a/arch/s390/mm/fault.c
+++ b/arch/s390/mm/fault.c
@@ -353,7 +353,7 @@ no_context:
353*/ 353*/
354out_of_memory: 354out_of_memory:
355 up_read(&mm->mmap_sem); 355 up_read(&mm->mmap_sem);
356 if (tsk->pid == 1) { 356 if (is_init(tsk)) {
357 yield(); 357 yield();
358 down_read(&mm->mmap_sem); 358 down_read(&mm->mmap_sem);
359 goto survive; 359 goto survive;
diff --git a/arch/sh/mm/fault.c b/arch/sh/mm/fault.c
index 507f28914706..68663b8f99ae 100644
--- a/arch/sh/mm/fault.c
+++ b/arch/sh/mm/fault.c
@@ -149,7 +149,7 @@ no_context:
149 */ 149 */
150out_of_memory: 150out_of_memory:
151 up_read(&mm->mmap_sem); 151 up_read(&mm->mmap_sem);
152 if (current->pid == 1) { 152 if (is_init(current)) {
153 yield(); 153 yield();
154 down_read(&mm->mmap_sem); 154 down_read(&mm->mmap_sem);
155 goto survive; 155 goto survive;
diff --git a/arch/sh64/mm/fault.c b/arch/sh64/mm/fault.c
index f08d0eaf6497..8e2f6c28b739 100644
--- a/arch/sh64/mm/fault.c
+++ b/arch/sh64/mm/fault.c
@@ -277,7 +277,7 @@ bad_area:
277 show_regs(regs); 277 show_regs(regs);
278#endif 278#endif
279 } 279 }
280 if (tsk->pid == 1) { 280 if (is_init(tsk)) {
281 panic("INIT had user mode bad_area\n"); 281 panic("INIT had user mode bad_area\n");
282 } 282 }
283 tsk->thread.address = address; 283 tsk->thread.address = address;
@@ -319,14 +319,14 @@ no_context:
319 * us unable to handle the page fault gracefully. 319 * us unable to handle the page fault gracefully.
320 */ 320 */
321out_of_memory: 321out_of_memory:
322 if (current->pid == 1) { 322 if (is_init(current)) {
323 panic("INIT out of memory\n"); 323 panic("INIT out of memory\n");
324 yield(); 324 yield();
325 goto survive; 325 goto survive;
326 } 326 }
327 printk("fault:Out of memory\n"); 327 printk("fault:Out of memory\n");
328 up_read(&mm->mmap_sem); 328 up_read(&mm->mmap_sem);
329 if (current->pid == 1) { 329 if (is_init(current)) {
330 yield(); 330 yield();
331 down_read(&mm->mmap_sem); 331 down_read(&mm->mmap_sem);
332 goto survive; 332 goto survive;
diff --git a/arch/um/kernel/trap.c b/arch/um/kernel/trap.c
index 61a23fff4395..c7b195c7e51f 100644
--- a/arch/um/kernel/trap.c
+++ b/arch/um/kernel/trap.c
@@ -120,7 +120,7 @@ out_nosemaphore:
120 * us unable to handle the page fault gracefully. 120 * us unable to handle the page fault gracefully.
121 */ 121 */
122out_of_memory: 122out_of_memory:
123 if (current->pid == 1) { 123 if (is_init(current)) {
124 up_read(&mm->mmap_sem); 124 up_read(&mm->mmap_sem);
125 yield(); 125 yield();
126 down_read(&mm->mmap_sem); 126 down_read(&mm->mmap_sem);
diff --git a/arch/x86_64/mm/fault.c b/arch/x86_64/mm/fault.c
index 9ba54cc2b5f6..3751b4788e28 100644
--- a/arch/x86_64/mm/fault.c
+++ b/arch/x86_64/mm/fault.c
@@ -244,7 +244,7 @@ static int is_errata93(struct pt_regs *regs, unsigned long address)
244 244
245int unhandled_signal(struct task_struct *tsk, int sig) 245int unhandled_signal(struct task_struct *tsk, int sig)
246{ 246{
247 if (tsk->pid == 1) 247 if (is_init(tsk))
248 return 1; 248 return 1;
249 if (tsk->ptrace & PT_PTRACED) 249 if (tsk->ptrace & PT_PTRACED)
250 return 0; 250 return 0;
@@ -580,7 +580,7 @@ no_context:
580 */ 580 */
581out_of_memory: 581out_of_memory:
582 up_read(&mm->mmap_sem); 582 up_read(&mm->mmap_sem);
583 if (current->pid == 1) { 583 if (is_init(current)) {
584 yield(); 584 yield();
585 goto again; 585 goto again;
586 } 586 }
diff --git a/arch/xtensa/mm/fault.c b/arch/xtensa/mm/fault.c
index a945a33e85a1..dd0dbec2e57e 100644
--- a/arch/xtensa/mm/fault.c
+++ b/arch/xtensa/mm/fault.c
@@ -144,7 +144,7 @@ bad_area:
144 */ 144 */
145out_of_memory: 145out_of_memory:
146 up_read(&mm->mmap_sem); 146 up_read(&mm->mmap_sem);
147 if (current->pid == 1) { 147 if (is_init(current)) {
148 yield(); 148 yield();
149 down_read(&mm->mmap_sem); 149 down_read(&mm->mmap_sem);
150 goto survive; 150 goto survive;
diff --git a/drivers/char/sysrq.c b/drivers/char/sysrq.c
index ee3ca8f1768e..0ad6cb081db4 100644
--- a/drivers/char/sysrq.c
+++ b/drivers/char/sysrq.c
@@ -208,7 +208,7 @@ static void send_sig_all(int sig)
208 struct task_struct *p; 208 struct task_struct *p;
209 209
210 for_each_process(p) { 210 for_each_process(p) {
211 if (p->mm && p->pid != 1) 211 if (p->mm && !is_init(p))
212 /* Not swapper, init nor kernel thread */ 212 /* Not swapper, init nor kernel thread */
213 force_sig(sig, p); 213 force_sig(sig, p);
214 } 214 }
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 3696f2f7126d..ed2af8671589 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -1033,6 +1033,16 @@ static inline int pid_alive(struct task_struct *p)
1033 return p->pids[PIDTYPE_PID].pid != NULL; 1033 return p->pids[PIDTYPE_PID].pid != NULL;
1034} 1034}
1035 1035
1036/**
1037 * is_init - check if a task structure is the first user space
1038 * task the kernel created.
1039 * @p: Task structure to be checked.
1040 */
1041static inline int is_init(struct task_struct *tsk)
1042{
1043 return tsk->pid == 1;
1044}
1045
1036extern void free_task(struct task_struct *tsk); 1046extern void free_task(struct task_struct *tsk);
1037#define get_task_struct(tsk) do { atomic_inc(&(tsk)->usage); } while(0) 1047#define get_task_struct(tsk) do { atomic_inc(&(tsk)->usage); } while(0)
1038 1048
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}
diff --git a/mm/oom_kill.c b/mm/oom_kill.c
index bada3d03119f..f3dd79c1c367 100644
--- a/mm/oom_kill.c
+++ b/mm/oom_kill.c
@@ -255,7 +255,7 @@ static struct task_struct *select_bad_process(unsigned long *ppoints)
255 */ 255 */
256static void __oom_kill_task(struct task_struct *p, const char *message) 256static void __oom_kill_task(struct task_struct *p, const char *message)
257{ 257{
258 if (p->pid == 1) { 258 if (is_init(p)) {
259 WARN_ON(1); 259 WARN_ON(1);
260 printk(KERN_WARNING "tried to kill init!\n"); 260 printk(KERN_WARNING "tried to kill init!\n");
261 return; 261 return;
diff --git a/security/commoncap.c b/security/commoncap.c
index f50fc298cf80..5a5ef5ca7ea9 100644
--- a/security/commoncap.c
+++ b/security/commoncap.c
@@ -169,7 +169,7 @@ void cap_bprm_apply_creds (struct linux_binprm *bprm, int unsafe)
169 /* For init, we want to retain the capabilities set 169 /* For init, we want to retain the capabilities set
170 * in the init_task struct. Thus we skip the usual 170 * in the init_task struct. Thus we skip the usual
171 * capability rules */ 171 * capability rules */
172 if (current->pid != 1) { 172 if (!is_init(current)) {
173 current->cap_permitted = new_permitted; 173 current->cap_permitted = new_permitted;
174 current->cap_effective = 174 current->cap_effective =
175 cap_intersect (new_permitted, bprm->cap_effective); 175 cap_intersect (new_permitted, bprm->cap_effective);