diff options
| author | tron <tron@NetBSD.org> | 1999-12-04 22:26:52 +0000 |
|---|---|---|
| committer | tron <tron@NetBSD.org> | 1999-12-04 22:26:52 +0000 |
| commit | 9b847640c36bcacdce1f4d9fa6c433fddca576b2 (patch) | |
| tree | 64a61fc74156886cf8369308deb24cb5bc62c756 /sys/compat/linux | |
| parent | 96fdbb96a898379a3605c4d3fb33b52376c16627 (diff) | |
Add bound checks in emulation of kill(2). This fixes the last part of
PR kern/8904 by Dave Sainty.
Diffstat (limited to 'sys/compat/linux')
| -rw-r--r-- | sys/compat/linux/common/linux_signal.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/sys/compat/linux/common/linux_signal.c b/sys/compat/linux/common/linux_signal.c index 333234a7b68..e9d1a9ba417 100644 --- a/sys/compat/linux/common/linux_signal.c +++ b/sys/compat/linux/common/linux_signal.c @@ -1,4 +1,4 @@ -/* $NetBSD: linux_signal.c,v 1.24 1999/10/04 17:46:37 fvdl Exp $ */ +/* $NetBSD: linux_signal.c,v 1.25 1999/12/04 22:26:52 tron Exp $ */ /*- * Copyright (c) 1995, 1998 The NetBSD Foundation, Inc. * All rights reserved. @@ -330,7 +330,7 @@ linux_sys_rt_sigaction(p, v, retval) } */ *uap = v; struct linux_sigaction nlsa, olsa; struct sigaction nbsa, obsa; - int error; + int error, sig; if (SCARG(uap, sigsetsize) != sizeof(linux_sigset_t)) return (EINVAL); @@ -341,7 +341,10 @@ linux_sys_rt_sigaction(p, v, retval) return (error); linux_to_native_sigaction(&nlsa, &nbsa); } - error = sigaction1(p, linux_to_native_sig[SCARG(uap, signum)], + sig = SCARG(uap, signum); + if (sig < 0 || sig >= LINUX__NSIG) + return (EINVAL); + error = sigaction1(p, linux_to_native_sig[sig], SCARG(uap, nsa) ? &nbsa : 0, SCARG(uap, osa) ? &obsa : 0); if (error) return (error); @@ -572,8 +575,12 @@ linux_sys_kill(p, v, retval) syscallarg(int) signum; } */ *uap = v; struct sys_kill_args ka; + int sig; SCARG(&ka, pid) = SCARG(uap, pid); - SCARG(&ka, signum) = linux_to_native_sig[SCARG(uap, signum)]; + sig = SCARG(uap, signum); + if (sig < 0 || sig >= LINUX__NSIG) + return (EINVAL); + SCARG(&ka, signum) = linux_to_native_sig[sig]; return sys_kill(p, &ka, retval); } |
