Commit 04eb7194 authored by Eric W. Biederman's avatar Eric W. Biederman Committed by Greg Kroah-Hartman

signal: Guard against negative signal numbers in copy_siginfo_from_user32

commit a3670058 upstream.

While fixing an out of bounds array access in known_siginfo_layout
reported by the kernel test robot it became apparent that the same bug
exists in siginfo_layout and affects copy_siginfo_from_user32.

The straight forward fix that makes guards against making this mistake
in the future and should keep the code size small is to just take an
unsigned signal number instead of a signed signal number, as I did to
fix known_siginfo_layout.

Cc: stable@vger.kernel.org
Fixes: cc731525 ("signal: Remove kernel interal si_code magic")
Signed-off-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 392d51e0
...@@ -36,7 +36,7 @@ enum siginfo_layout { ...@@ -36,7 +36,7 @@ enum siginfo_layout {
SIL_SYS, SIL_SYS,
}; };
enum siginfo_layout siginfo_layout(int sig, int si_code); enum siginfo_layout siginfo_layout(unsigned sig, int si_code);
/* /*
* Define some primitives to manipulate sigset_t. * Define some primitives to manipulate sigset_t.
......
...@@ -2847,7 +2847,7 @@ COMPAT_SYSCALL_DEFINE2(rt_sigpending, compat_sigset_t __user *, uset, ...@@ -2847,7 +2847,7 @@ COMPAT_SYSCALL_DEFINE2(rt_sigpending, compat_sigset_t __user *, uset,
} }
#endif #endif
enum siginfo_layout siginfo_layout(int sig, int si_code) enum siginfo_layout siginfo_layout(unsigned sig, int si_code)
{ {
enum siginfo_layout layout = SIL_KILL; enum siginfo_layout layout = SIL_KILL;
if ((si_code > SI_USER) && (si_code < SI_KERNEL)) { if ((si_code > SI_USER) && (si_code < SI_KERNEL)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment