From: Oleg Nesterov This patch simplifies some checks for magic siginfo values. It should not change the behaviour in any way. Signed-off-by: Oleg Nesterov Signed-off-by: Andrew Morton --- include/linux/sched.h | 5 +++++ kernel/signal.c | 18 +++++++----------- security/selinux/hooks.c | 3 +-- 3 files changed, 13 insertions(+), 13 deletions(-) diff -puN include/linux/sched.h~cleanup-the-usage-of-send_sig_xxx-constants include/linux/sched.h --- devel/include/linux/sched.h~cleanup-the-usage-of-send_sig_xxx-constants 2005-10-11 00:34:51.000000000 -0700 +++ devel-akpm/include/linux/sched.h 2005-10-11 00:34:51.000000000 -0700 @@ -1041,6 +1041,11 @@ extern int do_sigaltstack(const stack_t #define SEND_SIG_PRIV ((struct siginfo *) 1) #define SEND_SIG_FORCED ((struct siginfo *) 2) +static inline int is_si_special(const struct siginfo *info) +{ + return info <= SEND_SIG_FORCED; +} + /* True if we are on the alternate signal stack. */ static inline int on_sig_stack(unsigned long sp) diff -puN kernel/signal.c~cleanup-the-usage-of-send_sig_xxx-constants kernel/signal.c --- devel/kernel/signal.c~cleanup-the-usage-of-send_sig_xxx-constants 2005-10-11 00:34:51.000000000 -0700 +++ devel-akpm/kernel/signal.c 2005-10-11 00:34:51.000000000 -0700 @@ -661,9 +661,7 @@ static int check_kill_permission(int sig if (!valid_signal(sig)) return error; error = -EPERM; - if ((info == SEND_SIG_NOINFO || - (info != SEND_SIG_PRIV && info != SEND_SIG_FORCED - && SI_FROMUSER(info))) + if ((info == SEND_SIG_NOINFO || (!is_si_special(info) && SI_FROMUSER(info))) && ((sig != SIGCONT) || (current->signal->session != t->signal->session)) && (current->euid ^ t->suid) && (current->euid ^ t->uid) @@ -812,7 +810,7 @@ static int send_signal(int sig, struct s pass on the info struct. */ q = __sigqueue_alloc(t, GFP_ATOMIC, (sig < SIGRTMIN && - (info < SEND_SIG_FORCED || + (is_si_special(info) || info->si_code >= 0))); if (q) { list_add_tail(&q->list, &signals->list); @@ -835,16 +833,14 @@ static int send_signal(int sig, struct s copy_siginfo(&q->info, info); break; } - } else { - if (sig >= SIGRTMIN - && info != SEND_SIG_NOINFO && info != SEND_SIG_PRIV - && info->si_code != SI_USER) + } else if (!is_si_special(info)) { + if (sig >= SIGRTMIN && info->si_code != SI_USER) /* * Queue overflow, abort. We may abort if the signal was rt * and sent by user using something other than kill(). */ return -EAGAIN; - if ((info > SEND_SIG_PRIV) && (info->si_code == SI_TIMER)) + if (info->si_code == SI_TIMER) /* * Set up a return to indicate that we dropped * the signal. @@ -870,7 +866,7 @@ specific_send_sig_info(int sig, struct s BUG(); assert_spin_locked(&t->sighand->siglock); - if ((info > SEND_SIG_FORCED) && (info->si_code == SI_TIMER)) + if (!is_si_special(info) && (info->si_code == SI_TIMER)) /* * Set up a return to indicate that we dropped the signal. */ @@ -1062,7 +1058,7 @@ __group_send_sig_info(int sig, struct si assert_spin_locked(&p->sighand->siglock); handle_stop_signal(sig, p); - if ((info > SEND_SIG_FORCED) && (info->si_code == SI_TIMER)) + if (!is_si_special(info) && (info->si_code == SI_TIMER)) /* * Set up a return to indicate that we dropped the signal. */ diff -puN security/selinux/hooks.c~cleanup-the-usage-of-send_sig_xxx-constants security/selinux/hooks.c --- devel/security/selinux/hooks.c~cleanup-the-usage-of-send_sig_xxx-constants 2005-10-11 00:34:51.000000000 -0700 +++ devel-akpm/security/selinux/hooks.c 2005-10-11 00:34:51.000000000 -0700 @@ -2713,8 +2713,7 @@ static int selinux_task_kill(struct task if (rc) return rc; - if (info != SEND_SIG_NOINFO && (info == SEND_SIG_PRIV || - info == SEND_SIG_FORCED || SI_FROMKERNEL(info))) + if (info != SEND_SIG_NOINFO && (is_si_special(info) || SI_FROMKERNEL(info))) return 0; if (!sig) _