diff options
Diffstat (limited to 'kernel/exit.c')
| -rw-r--r-- | kernel/exit.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/kernel/exit.c b/kernel/exit.c index 39d35935b371..7be283d98983 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
| @@ -27,6 +27,7 @@ | |||
| 27 | #include <linux/mempolicy.h> | 27 | #include <linux/mempolicy.h> |
| 28 | #include <linux/cpuset.h> | 28 | #include <linux/cpuset.h> |
| 29 | #include <linux/syscalls.h> | 29 | #include <linux/syscalls.h> |
| 30 | #include <linux/signal.h> | ||
| 30 | 31 | ||
| 31 | #include <asm/uaccess.h> | 32 | #include <asm/uaccess.h> |
| 32 | #include <asm/unistd.h> | 33 | #include <asm/unistd.h> |
| @@ -38,6 +39,8 @@ extern struct task_struct *child_reaper; | |||
| 38 | 39 | ||
| 39 | int getrusage(struct task_struct *, int, struct rusage __user *); | 40 | int getrusage(struct task_struct *, int, struct rusage __user *); |
| 40 | 41 | ||
| 42 | static void exit_mm(struct task_struct * tsk); | ||
| 43 | |||
| 41 | static void __unhash_process(struct task_struct *p) | 44 | static void __unhash_process(struct task_struct *p) |
| 42 | { | 45 | { |
| 43 | nr_threads--; | 46 | nr_threads--; |
| @@ -209,7 +212,7 @@ static inline int has_stopped_jobs(int pgrp) | |||
| 209 | } | 212 | } |
| 210 | 213 | ||
| 211 | /** | 214 | /** |
| 212 | * reparent_to_init() - Reparent the calling kernel thread to the init task. | 215 | * reparent_to_init - Reparent the calling kernel thread to the init task. |
| 213 | * | 216 | * |
| 214 | * If a kernel thread is launched as a result of a system call, or if | 217 | * If a kernel thread is launched as a result of a system call, or if |
| 215 | * it ever exits, it should generally reparent itself to init so that | 218 | * it ever exits, it should generally reparent itself to init so that |
| @@ -277,7 +280,7 @@ void set_special_pids(pid_t session, pid_t pgrp) | |||
| 277 | */ | 280 | */ |
| 278 | int allow_signal(int sig) | 281 | int allow_signal(int sig) |
| 279 | { | 282 | { |
| 280 | if (sig < 1 || sig > _NSIG) | 283 | if (!valid_signal(sig) || sig < 1) |
| 281 | return -EINVAL; | 284 | return -EINVAL; |
| 282 | 285 | ||
| 283 | spin_lock_irq(¤t->sighand->siglock); | 286 | spin_lock_irq(¤t->sighand->siglock); |
| @@ -298,7 +301,7 @@ EXPORT_SYMBOL(allow_signal); | |||
| 298 | 301 | ||
| 299 | int disallow_signal(int sig) | 302 | int disallow_signal(int sig) |
| 300 | { | 303 | { |
| 301 | if (sig < 1 || sig > _NSIG) | 304 | if (!valid_signal(sig) || sig < 1) |
| 302 | return -EINVAL; | 305 | return -EINVAL; |
| 303 | 306 | ||
| 304 | spin_lock_irq(¤t->sighand->siglock); | 307 | spin_lock_irq(¤t->sighand->siglock); |
| @@ -473,7 +476,7 @@ EXPORT_SYMBOL_GPL(exit_fs); | |||
| 473 | * Turn us into a lazy TLB process if we | 476 | * Turn us into a lazy TLB process if we |
| 474 | * aren't already.. | 477 | * aren't already.. |
| 475 | */ | 478 | */ |
| 476 | void exit_mm(struct task_struct * tsk) | 479 | static void exit_mm(struct task_struct * tsk) |
| 477 | { | 480 | { |
| 478 | struct mm_struct *mm = tsk->mm; | 481 | struct mm_struct *mm = tsk->mm; |
| 479 | 482 | ||
| @@ -517,8 +520,6 @@ static inline void choose_new_parent(task_t *p, task_t *reaper, task_t *child_re | |||
| 517 | */ | 520 | */ |
| 518 | BUG_ON(p == reaper || reaper->exit_state >= EXIT_ZOMBIE); | 521 | BUG_ON(p == reaper || reaper->exit_state >= EXIT_ZOMBIE); |
| 519 | p->real_parent = reaper; | 522 | p->real_parent = reaper; |
| 520 | if (p->parent == p->real_parent) | ||
| 521 | BUG(); | ||
| 522 | } | 523 | } |
| 523 | 524 | ||
| 524 | static inline void reparent_thread(task_t *p, task_t *father, int traced) | 525 | static inline void reparent_thread(task_t *p, task_t *father, int traced) |
