diff options
32 files changed, 52 insertions, 37 deletions
diff --git a/arch/alpha/mm/fault.c b/arch/alpha/mm/fault.c index 25154df3055a..e0593e606140 100644 --- a/arch/alpha/mm/fault.c +++ b/arch/alpha/mm/fault.c | |||
@@ -188,7 +188,7 @@ do_page_fault(unsigned long address, unsigned long mmcsr, | |||
188 | /* We ran out of memory, or some other thing happened to us that | 188 | /* We ran out of memory, or some other thing happened to us that |
189 | made us unable to handle the page fault gracefully. */ | 189 | made us unable to handle the page fault gracefully. */ |
190 | out_of_memory: | 190 | out_of_memory: |
191 | if (is_init(current)) { | 191 | if (is_global_init(current)) { |
192 | yield(); | 192 | yield(); |
193 | down_read(&mm->mmap_sem); | 193 | down_read(&mm->mmap_sem); |
194 | goto survive; | 194 | goto survive; |
diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c index 59ed1d05b71b..a8a7dab757eb 100644 --- a/arch/arm/mm/fault.c +++ b/arch/arm/mm/fault.c | |||
@@ -197,7 +197,7 @@ survive: | |||
197 | return fault; | 197 | return fault; |
198 | 198 | ||
199 | out_of_memory: | 199 | out_of_memory: |
200 | if (!is_init(tsk)) | 200 | if (!is_global_init(tsk)) |
201 | goto out; | 201 | goto out; |
202 | 202 | ||
203 | /* | 203 | /* |
diff --git a/arch/avr32/kernel/traps.c b/arch/avr32/kernel/traps.c index 9a73ce7eb50f..8a7caf8e7b45 100644 --- a/arch/avr32/kernel/traps.c +++ b/arch/avr32/kernel/traps.c | |||
@@ -89,7 +89,7 @@ void _exception(long signr, struct pt_regs *regs, int code, | |||
89 | * generate the same exception over and over again and we get | 89 | * generate the same exception over and over again and we get |
90 | * nowhere. Better to kill it and let the kernel panic. | 90 | * nowhere. Better to kill it and let the kernel panic. |
91 | */ | 91 | */ |
92 | if (is_init(current)) { | 92 | if (is_global_init(current)) { |
93 | __sighandler_t handler; | 93 | __sighandler_t handler; |
94 | 94 | ||
95 | spin_lock_irq(¤t->sighand->siglock); | 95 | spin_lock_irq(¤t->sighand->siglock); |
diff --git a/arch/avr32/mm/fault.c b/arch/avr32/mm/fault.c index 11472f8701bd..6560cb18b4e3 100644 --- a/arch/avr32/mm/fault.c +++ b/arch/avr32/mm/fault.c | |||
@@ -160,7 +160,7 @@ bad_area: | |||
160 | if (exception_trace && printk_ratelimit()) | 160 | if (exception_trace && printk_ratelimit()) |
161 | printk("%s%s[%d]: segfault at %08lx pc %08lx " | 161 | printk("%s%s[%d]: segfault at %08lx pc %08lx " |
162 | "sp %08lx ecr %lu\n", | 162 | "sp %08lx ecr %lu\n", |
163 | is_init(tsk) ? KERN_EMERG : KERN_INFO, | 163 | is_global_init(tsk) ? KERN_EMERG : KERN_INFO, |
164 | tsk->comm, tsk->pid, address, regs->pc, | 164 | tsk->comm, tsk->pid, address, regs->pc, |
165 | regs->sp, ecr); | 165 | regs->sp, ecr); |
166 | _exception(SIGSEGV, regs, code, address); | 166 | _exception(SIGSEGV, regs, code, address); |
@@ -209,7 +209,7 @@ no_context: | |||
209 | */ | 209 | */ |
210 | out_of_memory: | 210 | out_of_memory: |
211 | up_read(&mm->mmap_sem); | 211 | up_read(&mm->mmap_sem); |
212 | if (is_init(current)) { | 212 | if (is_global_init(current)) { |
213 | yield(); | 213 | yield(); |
214 | down_read(&mm->mmap_sem); | 214 | down_read(&mm->mmap_sem); |
215 | goto survive; | 215 | goto survive; |
@@ -231,7 +231,7 @@ do_sigbus: | |||
231 | if (exception_trace) | 231 | if (exception_trace) |
232 | printk("%s%s[%d]: bus error at %08lx pc %08lx " | 232 | printk("%s%s[%d]: bus error at %08lx pc %08lx " |
233 | "sp %08lx ecr %lu\n", | 233 | "sp %08lx ecr %lu\n", |
234 | is_init(tsk) ? KERN_EMERG : KERN_INFO, | 234 | is_global_init(tsk) ? KERN_EMERG : KERN_INFO, |
235 | tsk->comm, tsk->pid, address, regs->pc, | 235 | tsk->comm, tsk->pid, address, regs->pc, |
236 | regs->sp, ecr); | 236 | regs->sp, ecr); |
237 | 237 | ||
diff --git a/arch/ia64/mm/fault.c b/arch/ia64/mm/fault.c index 32f26253c4e8..7571076a16a1 100644 --- a/arch/ia64/mm/fault.c +++ b/arch/ia64/mm/fault.c | |||
@@ -274,7 +274,7 @@ ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *re | |||
274 | 274 | ||
275 | out_of_memory: | 275 | out_of_memory: |
276 | up_read(&mm->mmap_sem); | 276 | up_read(&mm->mmap_sem); |
277 | if (is_init(current)) { | 277 | if (is_global_init(current)) { |
278 | yield(); | 278 | yield(); |
279 | down_read(&mm->mmap_sem); | 279 | down_read(&mm->mmap_sem); |
280 | goto survive; | 280 | goto survive; |
diff --git a/arch/m32r/mm/fault.c b/arch/m32r/mm/fault.c index 70a766aad3e0..4a71df4c1b30 100644 --- a/arch/m32r/mm/fault.c +++ b/arch/m32r/mm/fault.c | |||
@@ -271,7 +271,7 @@ no_context: | |||
271 | */ | 271 | */ |
272 | out_of_memory: | 272 | out_of_memory: |
273 | up_read(&mm->mmap_sem); | 273 | up_read(&mm->mmap_sem); |
274 | if (is_init(tsk)) { | 274 | if (is_global_init(tsk)) { |
275 | yield(); | 275 | yield(); |
276 | down_read(&mm->mmap_sem); | 276 | down_read(&mm->mmap_sem); |
277 | goto survive; | 277 | goto survive; |
diff --git a/arch/m68k/mm/fault.c b/arch/m68k/mm/fault.c index eaa618681159..f493f03231d5 100644 --- a/arch/m68k/mm/fault.c +++ b/arch/m68k/mm/fault.c | |||
@@ -180,7 +180,7 @@ good_area: | |||
180 | */ | 180 | */ |
181 | out_of_memory: | 181 | out_of_memory: |
182 | up_read(&mm->mmap_sem); | 182 | up_read(&mm->mmap_sem); |
183 | if (is_init(current)) { | 183 | if (is_global_init(current)) { |
184 | yield(); | 184 | yield(); |
185 | down_read(&mm->mmap_sem); | 185 | down_read(&mm->mmap_sem); |
186 | goto survive; | 186 | goto survive; |
diff --git a/arch/mips/mm/fault.c b/arch/mips/mm/fault.c index 5699c7713e2f..fa636fc6b7b9 100644 --- a/arch/mips/mm/fault.c +++ b/arch/mips/mm/fault.c | |||
@@ -173,7 +173,7 @@ no_context: | |||
173 | */ | 173 | */ |
174 | out_of_memory: | 174 | out_of_memory: |
175 | up_read(&mm->mmap_sem); | 175 | up_read(&mm->mmap_sem); |
176 | if (is_init(tsk)) { | 176 | if (is_global_init(tsk)) { |
177 | yield(); | 177 | yield(); |
178 | down_read(&mm->mmap_sem); | 178 | down_read(&mm->mmap_sem); |
179 | goto survive; | 179 | goto survive; |
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index bf9e39c6e296..9fb4a6849c5a 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c | |||
@@ -201,7 +201,7 @@ void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr) | |||
201 | * generate the same exception over and over again and we get | 201 | * generate the same exception over and over again and we get |
202 | * nowhere. Better to kill it and let the kernel panic. | 202 | * nowhere. Better to kill it and let the kernel panic. |
203 | */ | 203 | */ |
204 | if (is_init(current)) { | 204 | if (is_global_init(current)) { |
205 | __sighandler_t handler; | 205 | __sighandler_t handler; |
206 | 206 | ||
207 | spin_lock_irq(¤t->sighand->siglock); | 207 | spin_lock_irq(¤t->sighand->siglock); |
diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c index ab3546c5ac3a..a18fda361cc0 100644 --- a/arch/powerpc/mm/fault.c +++ b/arch/powerpc/mm/fault.c | |||
@@ -375,7 +375,7 @@ bad_area_nosemaphore: | |||
375 | */ | 375 | */ |
376 | out_of_memory: | 376 | out_of_memory: |
377 | up_read(&mm->mmap_sem); | 377 | up_read(&mm->mmap_sem); |
378 | if (is_init(current)) { | 378 | if (is_global_init(current)) { |
379 | yield(); | 379 | yield(); |
380 | down_read(&mm->mmap_sem); | 380 | down_read(&mm->mmap_sem); |
381 | goto survive; | 381 | goto survive; |
diff --git a/arch/powerpc/platforms/pseries/ras.c b/arch/powerpc/platforms/pseries/ras.c index 3a393c7f390e..a1ab25c7082f 100644 --- a/arch/powerpc/platforms/pseries/ras.c +++ b/arch/powerpc/platforms/pseries/ras.c | |||
@@ -332,7 +332,7 @@ static int recover_mce(struct pt_regs *regs, struct rtas_error_log * err) | |||
332 | err->disposition == RTAS_DISP_NOT_RECOVERED && | 332 | err->disposition == RTAS_DISP_NOT_RECOVERED && |
333 | err->target == RTAS_TARGET_MEMORY && | 333 | err->target == RTAS_TARGET_MEMORY && |
334 | err->type == RTAS_TYPE_ECC_UNCORR && | 334 | err->type == RTAS_TYPE_ECC_UNCORR && |
335 | !(current->pid == 0 || is_init(current))) { | 335 | !(current->pid == 0 || is_global_init(current))) { |
336 | /* Kill off a user process with an ECC error */ | 336 | /* Kill off a user process with an ECC error */ |
337 | printk(KERN_ERR "MCE: uncorrectable ecc error for pid %d\n", | 337 | printk(KERN_ERR "MCE: uncorrectable ecc error for pid %d\n", |
338 | current->pid); | 338 | current->pid); |
diff --git a/arch/ppc/kernel/traps.c b/arch/ppc/kernel/traps.c index 3f3b292eb773..c78568905c3b 100644 --- a/arch/ppc/kernel/traps.c +++ b/arch/ppc/kernel/traps.c | |||
@@ -121,7 +121,7 @@ void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr) | |||
121 | * generate the same exception over and over again and we get | 121 | * generate the same exception over and over again and we get |
122 | * nowhere. Better to kill it and let the kernel panic. | 122 | * nowhere. Better to kill it and let the kernel panic. |
123 | */ | 123 | */ |
124 | if (is_init(current)) { | 124 | if (is_global_init(current)) { |
125 | __sighandler_t handler; | 125 | __sighandler_t handler; |
126 | 126 | ||
127 | spin_lock_irq(¤t->sighand->siglock); | 127 | spin_lock_irq(¤t->sighand->siglock); |
diff --git a/arch/ppc/mm/fault.c b/arch/ppc/mm/fault.c index 94913ddcf76e..254c23b755e6 100644 --- a/arch/ppc/mm/fault.c +++ b/arch/ppc/mm/fault.c | |||
@@ -290,7 +290,7 @@ bad_area: | |||
290 | */ | 290 | */ |
291 | out_of_memory: | 291 | out_of_memory: |
292 | up_read(&mm->mmap_sem); | 292 | up_read(&mm->mmap_sem); |
293 | if (is_init(current)) { | 293 | if (is_global_init(current)) { |
294 | yield(); | 294 | yield(); |
295 | down_read(&mm->mmap_sem); | 295 | down_read(&mm->mmap_sem); |
296 | goto survive; | 296 | goto survive; |
diff --git a/arch/s390/lib/uaccess_pt.c b/arch/s390/lib/uaccess_pt.c index 60604b2819b2..b159a9d65680 100644 --- a/arch/s390/lib/uaccess_pt.c +++ b/arch/s390/lib/uaccess_pt.c | |||
@@ -64,7 +64,7 @@ out: | |||
64 | 64 | ||
65 | out_of_memory: | 65 | out_of_memory: |
66 | up_read(&mm->mmap_sem); | 66 | up_read(&mm->mmap_sem); |
67 | if (is_init(current)) { | 67 | if (is_global_init(current)) { |
68 | yield(); | 68 | yield(); |
69 | down_read(&mm->mmap_sem); | 69 | down_read(&mm->mmap_sem); |
70 | goto survive; | 70 | goto survive; |
diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c index 14c241ccdd4d..2456b52ed068 100644 --- a/arch/s390/mm/fault.c +++ b/arch/s390/mm/fault.c | |||
@@ -211,7 +211,7 @@ static int do_out_of_memory(struct pt_regs *regs, unsigned long error_code, | |||
211 | struct mm_struct *mm = tsk->mm; | 211 | struct mm_struct *mm = tsk->mm; |
212 | 212 | ||
213 | up_read(&mm->mmap_sem); | 213 | up_read(&mm->mmap_sem); |
214 | if (is_init(tsk)) { | 214 | if (is_global_init(tsk)) { |
215 | yield(); | 215 | yield(); |
216 | down_read(&mm->mmap_sem); | 216 | down_read(&mm->mmap_sem); |
217 | return 1; | 217 | return 1; |
diff --git a/arch/sh/mm/fault.c b/arch/sh/mm/fault.c index 4729668ce5bf..f33cedb353fc 100644 --- a/arch/sh/mm/fault.c +++ b/arch/sh/mm/fault.c | |||
@@ -207,7 +207,7 @@ no_context: | |||
207 | */ | 207 | */ |
208 | out_of_memory: | 208 | out_of_memory: |
209 | up_read(&mm->mmap_sem); | 209 | up_read(&mm->mmap_sem); |
210 | if (is_init(current)) { | 210 | if (is_global_init(current)) { |
211 | yield(); | 211 | yield(); |
212 | down_read(&mm->mmap_sem); | 212 | down_read(&mm->mmap_sem); |
213 | goto survive; | 213 | goto survive; |
diff --git a/arch/sh64/mm/fault.c b/arch/sh64/mm/fault.c index dd81c669c79b..7aea586fc3d0 100644 --- a/arch/sh64/mm/fault.c +++ b/arch/sh64/mm/fault.c | |||
@@ -278,7 +278,7 @@ bad_area: | |||
278 | show_regs(regs); | 278 | show_regs(regs); |
279 | #endif | 279 | #endif |
280 | } | 280 | } |
281 | if (is_init(tsk)) { | 281 | if (is_global_init(tsk)) { |
282 | panic("INIT had user mode bad_area\n"); | 282 | panic("INIT had user mode bad_area\n"); |
283 | } | 283 | } |
284 | tsk->thread.address = address; | 284 | tsk->thread.address = address; |
@@ -320,14 +320,14 @@ no_context: | |||
320 | * us unable to handle the page fault gracefully. | 320 | * us unable to handle the page fault gracefully. |
321 | */ | 321 | */ |
322 | out_of_memory: | 322 | out_of_memory: |
323 | if (is_init(current)) { | 323 | if (is_global_init(current)) { |
324 | panic("INIT out of memory\n"); | 324 | panic("INIT out of memory\n"); |
325 | yield(); | 325 | yield(); |
326 | goto survive; | 326 | goto survive; |
327 | } | 327 | } |
328 | printk("fault:Out of memory\n"); | 328 | printk("fault:Out of memory\n"); |
329 | up_read(&mm->mmap_sem); | 329 | up_read(&mm->mmap_sem); |
330 | if (is_init(current)) { | 330 | if (is_global_init(current)) { |
331 | yield(); | 331 | yield(); |
332 | down_read(&mm->mmap_sem); | 332 | down_read(&mm->mmap_sem); |
333 | goto survive; | 333 | goto survive; |
diff --git a/arch/um/kernel/trap.c b/arch/um/kernel/trap.c index bd060551e619..cb3321f8e0a9 100644 --- a/arch/um/kernel/trap.c +++ b/arch/um/kernel/trap.c | |||
@@ -108,7 +108,7 @@ out_nosemaphore: | |||
108 | * us unable to handle the page fault gracefully. | 108 | * us unable to handle the page fault gracefully. |
109 | */ | 109 | */ |
110 | out_of_memory: | 110 | out_of_memory: |
111 | if (is_init(current)) { | 111 | if (is_global_init(current)) { |
112 | up_read(&mm->mmap_sem); | 112 | up_read(&mm->mmap_sem); |
113 | yield(); | 113 | yield(); |
114 | down_read(&mm->mmap_sem); | 114 | down_read(&mm->mmap_sem); |
diff --git a/arch/x86/lib/usercopy_32.c b/arch/x86/lib/usercopy_32.c index 9f38b12b4af1..8bab2b2efaff 100644 --- a/arch/x86/lib/usercopy_32.c +++ b/arch/x86/lib/usercopy_32.c | |||
@@ -748,7 +748,7 @@ survive: | |||
748 | retval = get_user_pages(current, current->mm, | 748 | retval = get_user_pages(current, current->mm, |
749 | (unsigned long )to, 1, 1, 0, &pg, NULL); | 749 | (unsigned long )to, 1, 1, 0, &pg, NULL); |
750 | 750 | ||
751 | if (retval == -ENOMEM && is_init(current)) { | 751 | if (retval == -ENOMEM && is_global_init(current)) { |
752 | up_read(¤t->mm->mmap_sem); | 752 | up_read(¤t->mm->mmap_sem); |
753 | congestion_wait(WRITE, HZ/50); | 753 | congestion_wait(WRITE, HZ/50); |
754 | goto survive; | 754 | goto survive; |
diff --git a/arch/x86/mm/fault_32.c b/arch/x86/mm/fault_32.c index 6555c3d14371..4fc5e400cf0a 100644 --- a/arch/x86/mm/fault_32.c +++ b/arch/x86/mm/fault_32.c | |||
@@ -587,7 +587,7 @@ no_context: | |||
587 | */ | 587 | */ |
588 | out_of_memory: | 588 | out_of_memory: |
589 | up_read(&mm->mmap_sem); | 589 | up_read(&mm->mmap_sem); |
590 | if (is_init(tsk)) { | 590 | if (is_global_init(tsk)) { |
591 | yield(); | 591 | yield(); |
592 | down_read(&mm->mmap_sem); | 592 | down_read(&mm->mmap_sem); |
593 | goto survive; | 593 | goto survive; |
diff --git a/arch/x86/mm/fault_64.c b/arch/x86/mm/fault_64.c index 5e0e54906c48..5149ac136a5d 100644 --- a/arch/x86/mm/fault_64.c +++ b/arch/x86/mm/fault_64.c | |||
@@ -554,7 +554,7 @@ no_context: | |||
554 | */ | 554 | */ |
555 | out_of_memory: | 555 | out_of_memory: |
556 | up_read(&mm->mmap_sem); | 556 | up_read(&mm->mmap_sem); |
557 | if (is_init(current)) { | 557 | if (is_global_init(current)) { |
558 | yield(); | 558 | yield(); |
559 | goto again; | 559 | goto again; |
560 | } | 560 | } |
diff --git a/arch/xtensa/mm/fault.c b/arch/xtensa/mm/fault.c index 2f842859948f..33f366be323f 100644 --- a/arch/xtensa/mm/fault.c +++ b/arch/xtensa/mm/fault.c | |||
@@ -145,7 +145,7 @@ bad_area: | |||
145 | */ | 145 | */ |
146 | out_of_memory: | 146 | out_of_memory: |
147 | up_read(&mm->mmap_sem); | 147 | up_read(&mm->mmap_sem); |
148 | if (is_init(current)) { | 148 | if (is_global_init(current)) { |
149 | yield(); | 149 | yield(); |
150 | down_read(&mm->mmap_sem); | 150 | down_read(&mm->mmap_sem); |
151 | goto survive; | 151 | goto survive; |
diff --git a/drivers/char/sysrq.c b/drivers/char/sysrq.c index 78d14935f2b8..de60e1ea4fb3 100644 --- a/drivers/char/sysrq.c +++ b/drivers/char/sysrq.c | |||
@@ -251,7 +251,7 @@ static void send_sig_all(int sig) | |||
251 | struct task_struct *p; | 251 | struct task_struct *p; |
252 | 252 | ||
253 | for_each_process(p) { | 253 | for_each_process(p) { |
254 | if (p->mm && !is_init(p)) | 254 | if (p->mm && !is_global_init(p)) |
255 | /* Not swapper, init nor kernel thread */ | 255 | /* Not swapper, init nor kernel thread */ |
256 | force_sig(sig, p); | 256 | force_sig(sig, p); |
257 | } | 257 | } |
diff --git a/include/linux/sched.h b/include/linux/sched.h index df6049e5e8bf..47cf81d62047 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -1237,12 +1237,20 @@ static inline int pid_alive(struct task_struct *p) | |||
1237 | } | 1237 | } |
1238 | 1238 | ||
1239 | /** | 1239 | /** |
1240 | * is_init - check if a task structure is init | 1240 | * is_global_init - check if a task structure is init |
1241 | * @tsk: Task structure to be checked. | 1241 | * @tsk: Task structure to be checked. |
1242 | * | 1242 | * |
1243 | * Check if a task structure is the first user space task the kernel created. | 1243 | * Check if a task structure is the first user space task the kernel created. |
1244 | * | ||
1245 | * TODO: We should inline this function after some cleanups in pid_namespace.h | ||
1246 | */ | ||
1247 | extern int is_global_init(struct task_struct *tsk); | ||
1248 | |||
1249 | /* | ||
1250 | * is_container_init: | ||
1251 | * check whether in the task is init in its own pid namespace. | ||
1244 | */ | 1252 | */ |
1245 | static inline int is_init(struct task_struct *tsk) | 1253 | static inline int is_container_init(struct task_struct *tsk) |
1246 | { | 1254 | { |
1247 | return tsk->pid == 1; | 1255 | return tsk->pid == 1; |
1248 | } | 1256 | } |
diff --git a/kernel/capability.c b/kernel/capability.c index cbc5fd60c0f3..f02ad47320b9 100644 --- a/kernel/capability.c +++ b/kernel/capability.c | |||
@@ -12,6 +12,7 @@ | |||
12 | #include <linux/module.h> | 12 | #include <linux/module.h> |
13 | #include <linux/security.h> | 13 | #include <linux/security.h> |
14 | #include <linux/syscalls.h> | 14 | #include <linux/syscalls.h> |
15 | #include <linux/pid_namespace.h> | ||
15 | #include <asm/uaccess.h> | 16 | #include <asm/uaccess.h> |
16 | 17 | ||
17 | /* | 18 | /* |
@@ -129,7 +130,7 @@ static inline int cap_set_all(kernel_cap_t *effective, | |||
129 | int found = 0; | 130 | int found = 0; |
130 | 131 | ||
131 | do_each_thread(g, target) { | 132 | do_each_thread(g, target) { |
132 | if (target == current || is_init(target)) | 133 | if (target == current || is_container_init(target->group_leader)) |
133 | continue; | 134 | continue; |
134 | found = 1; | 135 | found = 1; |
135 | if (security_capset_check(target, effective, inheritable, | 136 | if (security_capset_check(target, effective, inheritable, |
diff --git a/kernel/exit.c b/kernel/exit.c index d1eddc753fe3..d22aefabb129 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
@@ -221,7 +221,7 @@ static int will_become_orphaned_pgrp(struct pid *pgrp, struct task_struct *ignor | |||
221 | do_each_pid_task(pgrp, PIDTYPE_PGID, p) { | 221 | do_each_pid_task(pgrp, PIDTYPE_PGID, p) { |
222 | if (p == ignored_task | 222 | if (p == ignored_task |
223 | || p->exit_state | 223 | || p->exit_state |
224 | || is_init(p->real_parent)) | 224 | || is_global_init(p->real_parent)) |
225 | continue; | 225 | continue; |
226 | if (task_pgrp(p->real_parent) != pgrp && | 226 | if (task_pgrp(p->real_parent) != pgrp && |
227 | task_session(p->real_parent) == task_session(p)) { | 227 | task_session(p->real_parent) == task_session(p)) { |
diff --git a/kernel/kexec.c b/kernel/kexec.c index e9f1b4ea504d..fbffdb457cce 100644 --- a/kernel/kexec.c +++ b/kernel/kexec.c | |||
@@ -51,7 +51,7 @@ struct resource crashk_res = { | |||
51 | 51 | ||
52 | int kexec_should_crash(struct task_struct *p) | 52 | int kexec_should_crash(struct task_struct *p) |
53 | { | 53 | { |
54 | if (in_interrupt() || !p->pid || is_init(p) || panic_on_oops) | 54 | if (in_interrupt() || !p->pid || is_global_init(p) || panic_on_oops) |
55 | return 1; | 55 | return 1; |
56 | return 0; | 56 | return 0; |
57 | } | 57 | } |
diff --git a/kernel/pid.c b/kernel/pid.c index 78c0dbffde65..bb0785109d39 100644 --- a/kernel/pid.c +++ b/kernel/pid.c | |||
@@ -70,6 +70,11 @@ struct pid_namespace init_pid_ns = { | |||
70 | .child_reaper = &init_task | 70 | .child_reaper = &init_task |
71 | }; | 71 | }; |
72 | 72 | ||
73 | int is_global_init(struct task_struct *tsk) | ||
74 | { | ||
75 | return tsk == init_pid_ns.child_reaper; | ||
76 | } | ||
77 | |||
73 | /* | 78 | /* |
74 | * Note: disable interrupts while the pidmap_lock is held as an | 79 | * Note: disable interrupts while the pidmap_lock is held as an |
75 | * interrupt might come in and do read_lock(&tasklist_lock). | 80 | * interrupt might come in and do read_lock(&tasklist_lock). |
diff --git a/kernel/signal.c b/kernel/signal.c index 0a6d3726cb80..8214ffad54bc 100644 --- a/kernel/signal.c +++ b/kernel/signal.c | |||
@@ -256,7 +256,7 @@ flush_signal_handlers(struct task_struct *t, int force_default) | |||
256 | 256 | ||
257 | int unhandled_signal(struct task_struct *tsk, int sig) | 257 | int unhandled_signal(struct task_struct *tsk, int sig) |
258 | { | 258 | { |
259 | if (is_init(tsk)) | 259 | if (is_global_init(tsk)) |
260 | return 1; | 260 | return 1; |
261 | if (tsk->ptrace & PT_PTRACED) | 261 | if (tsk->ptrace & PT_PTRACED) |
262 | return 0; | 262 | return 0; |
diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 067554bda8b7..44868e4df1d3 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c | |||
@@ -1888,7 +1888,7 @@ int proc_dointvec_bset(struct ctl_table *table, int write, struct file *filp, | |||
1888 | return -EPERM; | 1888 | return -EPERM; |
1889 | } | 1889 | } |
1890 | 1890 | ||
1891 | op = is_init(current) ? OP_SET : OP_AND; | 1891 | op = is_global_init(current) ? OP_SET : OP_AND; |
1892 | return do_proc_dointvec(table,write,filp,buffer,lenp,ppos, | 1892 | return do_proc_dointvec(table,write,filp,buffer,lenp,ppos, |
1893 | do_proc_dointvec_bset_conv,&op); | 1893 | do_proc_dointvec_bset_conv,&op); |
1894 | } | 1894 | } |
diff --git a/mm/oom_kill.c b/mm/oom_kill.c index a64decb5b13f..b1c2d0f86222 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c | |||
@@ -212,7 +212,7 @@ static struct task_struct *select_bad_process(unsigned long *ppoints) | |||
212 | if (!p->mm) | 212 | if (!p->mm) |
213 | continue; | 213 | continue; |
214 | /* skip the init task */ | 214 | /* skip the init task */ |
215 | if (is_init(p)) | 215 | if (is_global_init(p)) |
216 | continue; | 216 | continue; |
217 | 217 | ||
218 | /* | 218 | /* |
@@ -265,7 +265,7 @@ static struct task_struct *select_bad_process(unsigned long *ppoints) | |||
265 | */ | 265 | */ |
266 | static void __oom_kill_task(struct task_struct *p, int verbose) | 266 | static void __oom_kill_task(struct task_struct *p, int verbose) |
267 | { | 267 | { |
268 | if (is_init(p)) { | 268 | if (is_global_init(p)) { |
269 | WARN_ON(1); | 269 | WARN_ON(1); |
270 | printk(KERN_WARNING "tried to kill init!\n"); | 270 | printk(KERN_WARNING "tried to kill init!\n"); |
271 | return; | 271 | return; |
diff --git a/security/commoncap.c b/security/commoncap.c index 48ca5b092768..43f902750a1b 100644 --- a/security/commoncap.c +++ b/security/commoncap.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/xattr.h> | 23 | #include <linux/xattr.h> |
24 | #include <linux/hugetlb.h> | 24 | #include <linux/hugetlb.h> |
25 | #include <linux/mount.h> | 25 | #include <linux/mount.h> |
26 | #include <linux/sched.h> | ||
26 | 27 | ||
27 | #ifdef CONFIG_SECURITY_FILE_CAPABILITIES | 28 | #ifdef CONFIG_SECURITY_FILE_CAPABILITIES |
28 | /* | 29 | /* |
@@ -334,7 +335,7 @@ void cap_bprm_apply_creds (struct linux_binprm *bprm, int unsafe) | |||
334 | /* For init, we want to retain the capabilities set | 335 | /* For init, we want to retain the capabilities set |
335 | * in the init_task struct. Thus we skip the usual | 336 | * in the init_task struct. Thus we skip the usual |
336 | * capability rules */ | 337 | * capability rules */ |
337 | if (!is_init(current)) { | 338 | if (!is_global_init(current)) { |
338 | current->cap_permitted = new_permitted; | 339 | current->cap_permitted = new_permitted; |
339 | current->cap_effective = bprm->cap_effective ? | 340 | current->cap_effective = bprm->cap_effective ? |
340 | new_permitted : 0; | 341 | new_permitted : 0; |