| From 69828dce7af2cb6d08ef5a03de687d422fb7ec1f Mon Sep 17 00:00:00 2001 |
| From: Vladimir Davydov <vdavydov@parallels.com> |
| Date: Thu, 16 Apr 2015 12:47:35 -0700 |
| Subject: signal: remove warning about using SI_TKILL in rt_[tg]sigqueueinfo |
| |
| From: Vladimir Davydov <vdavydov@parallels.com> |
| |
| commit 69828dce7af2cb6d08ef5a03de687d422fb7ec1f upstream. |
| |
| Sending SI_TKILL from rt_[tg]sigqueueinfo was deprecated, so now we issue |
| a warning on the first attempt of doing it. We use WARN_ON_ONCE, which is |
| not informative and, what is worse, taints the kernel, making the trinity |
| syscall fuzzer complain false-positively from time to time. |
| |
| It does not look like we need this warning at all, because the behaviour |
| changed quite a long time ago (2.6.39), and if an application relies on |
| the old API, it gets EPERM anyway and can issue a warning by itself. |
| |
| So let us zap the warning in kernel. |
| |
| Signed-off-by: Vladimir Davydov <vdavydov@parallels.com> |
| Acked-by: Oleg Nesterov <oleg@redhat.com> |
| Cc: Richard Weinberger <richard@nod.at> |
| Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| kernel/signal.c | 14 +++++--------- |
| 1 file changed, 5 insertions(+), 9 deletions(-) |
| |
| --- a/kernel/signal.c |
| +++ b/kernel/signal.c |
| @@ -3004,11 +3004,9 @@ static int do_rt_sigqueueinfo(pid_t pid, |
| * Nor can they impersonate a kill()/tgkill(), which adds source info. |
| */ |
| if ((info->si_code >= 0 || info->si_code == SI_TKILL) && |
| - (task_pid_vnr(current) != pid)) { |
| - /* We used to allow any < 0 si_code */ |
| - WARN_ON_ONCE(info->si_code < 0); |
| + (task_pid_vnr(current) != pid)) |
| return -EPERM; |
| - } |
| + |
| info->si_signo = sig; |
| |
| /* POSIX.1b doesn't mention process groups. */ |
| @@ -3053,12 +3051,10 @@ static int do_rt_tgsigqueueinfo(pid_t tg |
| /* Not even root can pretend to send signals from the kernel. |
| * Nor can they impersonate a kill()/tgkill(), which adds source info. |
| */ |
| - if (((info->si_code >= 0 || info->si_code == SI_TKILL)) && |
| - (task_pid_vnr(current) != pid)) { |
| - /* We used to allow any < 0 si_code */ |
| - WARN_ON_ONCE(info->si_code < 0); |
| + if ((info->si_code >= 0 || info->si_code == SI_TKILL) && |
| + (task_pid_vnr(current) != pid)) |
| return -EPERM; |
| - } |
| + |
| info->si_signo = sig; |
| |
| return do_send_specific(tgid, pid, sig, info); |