diff options
Diffstat (limited to 'kernel/signal.c')
| -rw-r--r-- | kernel/signal.c | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/kernel/signal.c b/kernel/signal.c index a390499943e4..d51c5ddd855c 100644 --- a/kernel/signal.c +++ b/kernel/signal.c | |||
| @@ -2992,11 +2992,9 @@ static int do_rt_sigqueueinfo(pid_t pid, int sig, siginfo_t *info) | |||
| 2992 | * Nor can they impersonate a kill()/tgkill(), which adds source info. | 2992 | * Nor can they impersonate a kill()/tgkill(), which adds source info. |
| 2993 | */ | 2993 | */ |
| 2994 | if ((info->si_code >= 0 || info->si_code == SI_TKILL) && | 2994 | if ((info->si_code >= 0 || info->si_code == SI_TKILL) && |
| 2995 | (task_pid_vnr(current) != pid)) { | 2995 | (task_pid_vnr(current) != pid)) |
| 2996 | /* We used to allow any < 0 si_code */ | ||
| 2997 | WARN_ON_ONCE(info->si_code < 0); | ||
| 2998 | return -EPERM; | 2996 | return -EPERM; |
| 2999 | } | 2997 | |
| 3000 | info->si_signo = sig; | 2998 | info->si_signo = sig; |
| 3001 | 2999 | ||
| 3002 | /* POSIX.1b doesn't mention process groups. */ | 3000 | /* POSIX.1b doesn't mention process groups. */ |
| @@ -3041,12 +3039,10 @@ static int do_rt_tgsigqueueinfo(pid_t tgid, pid_t pid, int sig, siginfo_t *info) | |||
| 3041 | /* Not even root can pretend to send signals from the kernel. | 3039 | /* Not even root can pretend to send signals from the kernel. |
| 3042 | * Nor can they impersonate a kill()/tgkill(), which adds source info. | 3040 | * Nor can they impersonate a kill()/tgkill(), which adds source info. |
| 3043 | */ | 3041 | */ |
| 3044 | if (((info->si_code >= 0 || info->si_code == SI_TKILL)) && | 3042 | if ((info->si_code >= 0 || info->si_code == SI_TKILL) && |
| 3045 | (task_pid_vnr(current) != pid)) { | 3043 | (task_pid_vnr(current) != pid)) |
| 3046 | /* We used to allow any < 0 si_code */ | ||
| 3047 | WARN_ON_ONCE(info->si_code < 0); | ||
| 3048 | return -EPERM; | 3044 | return -EPERM; |
| 3049 | } | 3045 | |
| 3050 | info->si_signo = sig; | 3046 | info->si_signo = sig; |
| 3051 | 3047 | ||
| 3052 | return do_send_specific(tgid, pid, sig, info); | 3048 | return do_send_specific(tgid, pid, sig, info); |
