Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/compat Bounds check syscall arguments where appropriate
details: https://anonhg.NetBSD.org/src/rev/19b6ea827049
branches: trunk
changeset: 570767:19b6ea827049
user: david <david%NetBSD.org@localhost>
date: Wed Oct 27 19:29:57 2004 +0000
description:
Bounds check syscall arguments where appropriate
diffstat:
sys/compat/irix/irix_signal.c | 10 ++++++++--
sys/compat/irix/irix_swap.c | 5 +++--
sys/compat/osf1/osf1_signal.c | 13 ++++++++++---
sys/compat/svr4/svr4_filio.c | 6 ++++--
sys/compat/svr4/svr4_signal.c | 8 ++++----
sys/compat/svr4_32/svr4_32_filio.c | 6 ++++--
sys/compat/svr4_32/svr4_32_signal.c | 9 +++++----
sys/compat/ultrix/ultrix_misc.c | 6 +++---
8 files changed, 41 insertions(+), 22 deletions(-)
diffs (269 lines):
diff -r 19910d7e9ce3 -r 19b6ea827049 sys/compat/irix/irix_signal.c
--- a/sys/compat/irix/irix_signal.c Wed Oct 27 19:29:56 2004 +0000
+++ b/sys/compat/irix/irix_signal.c Wed Oct 27 19:29:57 2004 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: irix_signal.c,v 1.28 2003/11/26 08:36:51 he Exp $ */
+/* $NetBSD: irix_signal.c,v 1.29 2004/10/27 19:29:57 david Exp $ */
/*-
* Copyright (c) 1994, 2001-2002 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: irix_signal.c,v 1.28 2003/11/26 08:36:51 he Exp $");
+__KERNEL_RCSID(0, "$NetBSD: irix_signal.c,v 1.29 2004/10/27 19:29:57 david Exp $");
#include <sys/types.h>
#include <sys/signal.h>
@@ -155,6 +155,10 @@
u_long code;
caddr_t addr;
{
+ if (sig < 0 || sig > SVR4_NSIG) {
+ isi->isi_errno = IRIX_EINVAL;
+ return;
+ }
isi->isi_signo = native_to_svr4_signo[sig];
isi->isi_errno = 0;
isi->isi_addr = (irix_app32_ptr_t)addr;
@@ -1009,6 +1013,8 @@
* The signal trampoline is hence saved in the p_emuldata field
* of struct proc, in an array (one element for each signal)
*/
+ if (SCARG(uap, signum) < 0)
+ return(EINVAL);
signum = svr4_to_native_signo[SCARG(uap, signum)];
ied = (struct irix_emuldata *)(p->p_emuldata);
diff -r 19910d7e9ce3 -r 19b6ea827049 sys/compat/irix/irix_swap.c
--- a/sys/compat/irix/irix_swap.c Wed Oct 27 19:29:56 2004 +0000
+++ b/sys/compat/irix/irix_swap.c Wed Oct 27 19:29:57 2004 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: irix_swap.c,v 1.11 2003/11/13 03:09:29 chs Exp $ */
+/* $NetBSD: irix_swap.c,v 1.12 2004/10/27 19:29:57 david Exp $ */
/*-
* Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: irix_swap.c,v 1.11 2003/11/13 03:09:29 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: irix_swap.c,v 1.12 2004/10/27 19:29:57 david Exp $");
#include <sys/types.h>
#include <sys/signal.h>
@@ -222,6 +222,7 @@
default:
printf("irix_sys_swapctl(): unsupported command %d\n",
SCARG(uap, cmd));
+ return EINVAL;
break;
}
return 0;
diff -r 19910d7e9ce3 -r 19b6ea827049 sys/compat/osf1/osf1_signal.c
--- a/sys/compat/osf1/osf1_signal.c Wed Oct 27 19:29:56 2004 +0000
+++ b/sys/compat/osf1/osf1_signal.c Wed Oct 27 19:29:57 2004 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: osf1_signal.c,v 1.23 2003/09/23 18:54:24 cl Exp $ */
+/* $NetBSD: osf1_signal.c,v 1.24 2004/10/27 19:29:57 david Exp $ */
/*
* Copyright (c) 1999 Christopher G. Demetriou. All rights reserved.
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: osf1_signal.c,v 1.23 2003/09/23 18:54:24 cl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: osf1_signal.c,v 1.24 2004/10/27 19:29:57 david Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -64,6 +64,8 @@
struct osf1_sys_kill_args *uap = v;
struct sys_kill_args ka;
+ if (SCARG(uap, signum) < 0 || SCARG(uap, signum) > OSF1_NSIG)
+ return EINVAL;
SCARG(&ka, pid) = SCARG(uap, pid);
SCARG(&ka, signum) = osf1_to_native_signo[SCARG(uap, signum)];
return sys_kill(l, &ka, retval);
@@ -84,6 +86,8 @@
caddr_t sg;
int error;
+ if (SCARG(uap, signum) < 0 || SCARG(uap, signum) > OSF1_NSIG)
+ return EINVAL;
sg = stackgap_init(p, 0);
nosa = SCARG(uap, nsa);
oosa = SCARG(uap, osa);
@@ -181,10 +185,13 @@
{
struct osf1_sys_signal_args *uap = v;
struct proc *p = l->l_proc;
- int signum = osf1_to_native_signo[OSF1_SIGNO(SCARG(uap, signum))];
+ int signum;
int error;
caddr_t sg = stackgap_init(p, 0);
+ if (SCARG(uap, signum) < 0 || SCARG(uap, signum) > OSF1_NSIG)
+ return EINVAL;
+ signum = osf1_to_native_signo[OSF1_SIGNO(SCARG(uap, signum))];
if (signum <= 0 || signum >= OSF1_NSIG) {
if (OSF1_SIGCALL(SCARG(uap, signum)) == OSF1_SIGNAL_MASK ||
OSF1_SIGCALL(SCARG(uap, signum)) == OSF1_SIGDEFER_MASK)
diff -r 19910d7e9ce3 -r 19b6ea827049 sys/compat/svr4/svr4_filio.c
--- a/sys/compat/svr4/svr4_filio.c Wed Oct 27 19:29:56 2004 +0000
+++ b/sys/compat/svr4/svr4_filio.c Wed Oct 27 19:29:57 2004 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: svr4_filio.c,v 1.12 2003/06/29 22:29:47 fvdl Exp $ */
+/* $NetBSD: svr4_filio.c,v 1.13 2004/10/27 19:29:57 david Exp $ */
/*-
* Copyright (c) 1994 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: svr4_filio.c,v 1.12 2003/06/29 22:29:47 fvdl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: svr4_filio.c,v 1.13 2004/10/27 19:29:57 david Exp $");
#include <sys/param.h>
#include <sys/proc.h>
@@ -85,6 +85,8 @@
*retval = 0;
+ if ((fp = fd_getfile(fdp, fd)) == NULL)
+ return EBADF;
switch (cmd) {
case SVR4_FIOCLEX:
fdp->fd_ofileflags[fd] |= UF_EXCLOSE;
diff -r 19910d7e9ce3 -r 19b6ea827049 sys/compat/svr4/svr4_signal.c
--- a/sys/compat/svr4/svr4_signal.c Wed Oct 27 19:29:56 2004 +0000
+++ b/sys/compat/svr4/svr4_signal.c Wed Oct 27 19:29:57 2004 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: svr4_signal.c,v 1.49 2003/01/18 17:31:06 thorpej Exp $ */
+/* $NetBSD: svr4_signal.c,v 1.50 2004/10/27 19:29:57 david Exp $ */
/*-
* Copyright (c) 1994, 1998 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: svr4_signal.c,v 1.49 2003/01/18 17:31:06 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: svr4_signal.c,v 1.50 2004/10/27 19:29:57 david Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -234,7 +234,7 @@
return (error);
svr4_to_native_sigaction(&nssa, &nbsa);
}
- error = sigaction1(p, svr4_to_native_signo[SCARG(uap, signum)],
+ error = sigaction1(p, svr4_to_native_signo[SVR4_SIGNO(SCARG(uap, signum))],
SCARG(uap, nsa) ? &nbsa : 0, SCARG(uap, osa) ? &obsa : 0,
NULL, 0);
if (error)
@@ -478,7 +478,7 @@
struct sys_kill_args ka;
SCARG(&ka, pid) = SCARG(uap, pid);
- SCARG(&ka, signum) = svr4_to_native_signo[SCARG(uap, signum)];
+ SCARG(&ka, signum) = svr4_to_native_signo[SVR4_SIGNO(SCARG(uap, signum))];
return sys_kill(l, &ka, retval);
}
diff -r 19910d7e9ce3 -r 19b6ea827049 sys/compat/svr4_32/svr4_32_filio.c
--- a/sys/compat/svr4_32/svr4_32_filio.c Wed Oct 27 19:29:56 2004 +0000
+++ b/sys/compat/svr4_32/svr4_32_filio.c Wed Oct 27 19:29:57 2004 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: svr4_32_filio.c,v 1.6 2003/06/29 22:29:50 fvdl Exp $ */
+/* $NetBSD: svr4_32_filio.c,v 1.7 2004/10/27 19:29:57 david Exp $ */
/*-
* Copyright (c) 1994 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: svr4_32_filio.c,v 1.6 2003/06/29 22:29:50 fvdl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: svr4_32_filio.c,v 1.7 2004/10/27 19:29:57 david Exp $");
#include <sys/param.h>
#include <sys/proc.h>
@@ -84,6 +84,8 @@
*retval = 0;
+ if ((fp = fd_getfile(fdp, fd)) == NULL)
+ return EBADF;
switch (cmd) {
case SVR4_FIOCLEX:
fdp->fd_ofileflags[fd] |= UF_EXCLOSE;
diff -r 19910d7e9ce3 -r 19b6ea827049 sys/compat/svr4_32/svr4_32_signal.c
--- a/sys/compat/svr4_32/svr4_32_signal.c Wed Oct 27 19:29:56 2004 +0000
+++ b/sys/compat/svr4_32/svr4_32_signal.c Wed Oct 27 19:29:57 2004 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: svr4_32_signal.c,v 1.11 2003/10/21 09:02:50 petrov Exp $ */
+/* $NetBSD: svr4_32_signal.c,v 1.12 2004/10/27 19:29:57 david Exp $ */
/*-
* Copyright (c) 1994, 1998 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: svr4_32_signal.c,v 1.11 2003/10/21 09:02:50 petrov Exp $");
+__KERNEL_RCSID(0, "$NetBSD: svr4_32_signal.c,v 1.12 2004/10/27 19:29:57 david Exp $");
#if defined(_KERNEL_OPT)
#include "opt_compat_svr4.h"
@@ -369,7 +369,8 @@
return (error);
svr4_32_to_native_sigaction(&nssa, &nbsa);
}
- error = sigaction1(l->l_proc, svr4_to_native_signo[SCARG(uap, signum)],
+ error = sigaction1(l->l_proc,
+ svr4_to_native_signo[SVR4_SIGNO(SCARG(uap, signum))],
SCARG(uap, nsa) ? &nbsa : 0, SCARG(uap, osa) ? &obsa : 0,
NULL, 0);
if (error)
@@ -618,7 +619,7 @@
struct sys_kill_args ka;
SCARG(&ka, pid) = SCARG(uap, pid);
- SCARG(&ka, signum) = svr4_to_native_signo[SCARG(uap, signum)];
+ SCARG(&ka, signum) = svr4_to_native_signo[SVR4_SIGNO(SCARG(uap, signum))];
return sys_kill(l, &ka, retval);
}
diff -r 19910d7e9ce3 -r 19b6ea827049 sys/compat/ultrix/ultrix_misc.c
--- a/sys/compat/ultrix/ultrix_misc.c Wed Oct 27 19:29:56 2004 +0000
+++ b/sys/compat/ultrix/ultrix_misc.c Wed Oct 27 19:29:57 2004 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: ultrix_misc.c,v 1.94 2004/04/25 06:02:20 matt Exp $ */
+/* $NetBSD: ultrix_misc.c,v 1.95 2004/10/27 19:29:57 david Exp $ */
/*
* Copyright (c) 1995, 1997 Jonathan Stone (hereinafter referred to as the author)
@@ -76,7 +76,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ultrix_misc.c,v 1.94 2004/04/25 06:02:20 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ultrix_misc.c,v 1.95 2004/10/27 19:29:57 david Exp $");
#if defined(_KERNEL_OPT)
#include "opt_nfsserver.h"
@@ -539,7 +539,7 @@
{
struct ultrix_sys_cacheflush_args /* {
syscallarg(void *) addr;
- syscallarg(int) nbytes;
+ syscallarg(unsigned) nbytes;
syscallarg(int) flag;
} */ *uap = v;
struct proc *p = l->l_proc;
Home |
Main Index |
Thread Index |
Old Index