summaryrefslogtreecommitdiff
path: root/sys/compat/linux
diff options
context:
space:
mode:
authortron <tron@NetBSD.org>1999-12-04 22:26:52 +0000
committertron <tron@NetBSD.org>1999-12-04 22:26:52 +0000
commit9b847640c36bcacdce1f4d9fa6c433fddca576b2 (patch)
tree64a61fc74156886cf8369308deb24cb5bc62c756 /sys/compat/linux
parent96fdbb96a898379a3605c4d3fb33b52376c16627 (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.c15
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);
}