diff options
| author | manu <manu@NetBSD.org> | 2006-09-23 22:11:59 +0000 |
|---|---|---|
| committer | manu <manu@NetBSD.org> | 2006-09-23 22:11:59 +0000 |
| commit | 63ac93df54cd459cfecfc28db459efb55f78bb02 (patch) | |
| tree | 44f6dd4751a21004633a7f90aac7f59b4b53c5ee /sys | |
| parent | f5b68de4eb5c9449947b5e81ca1c6a2347fe9b55 (diff) | |
Add sysctl tracing to emulations.
While we are there, fix a bug in FreeBSD sysctl emulation: use copyin for
moving data to the kernel
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/compat/darwin/darwin_sysctl.c | 21 | ||||
| -rw-r--r-- | sys/compat/freebsd/freebsd_sysctl.c | 44 | ||||
| -rw-r--r-- | sys/compat/linux/common/linux_sysctl.c | 13 | ||||
| -rw-r--r-- | sys/compat/linux32/common/linux32_sysctl.c | 25 | ||||
| -rw-r--r-- | sys/compat/netbsd32/netbsd32_sysctl.c | 13 |
5 files changed, 83 insertions, 33 deletions
diff --git a/sys/compat/darwin/darwin_sysctl.c b/sys/compat/darwin/darwin_sysctl.c index fde98a6c74c..a35c799e36a 100644 --- a/sys/compat/darwin/darwin_sysctl.c +++ b/sys/compat/darwin/darwin_sysctl.c @@ -1,4 +1,4 @@ -/* $NetBSD: darwin_sysctl.c,v 1.43 2006/08/29 23:57:49 christos Exp $ */ +/* $NetBSD: darwin_sysctl.c,v 1.44 2006/09/23 22:11:59 manu Exp $ */ /*- * Copyright (c) 2002 The NetBSD Foundation, Inc. @@ -37,7 +37,9 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: darwin_sysctl.c,v 1.43 2006/08/29 23:57:49 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: darwin_sysctl.c,v 1.44 2006/09/23 22:11:59 manu Exp $"); + +#include "opt_ktrace.h" #include <sys/types.h> #include <sys/param.h> @@ -49,6 +51,9 @@ __KERNEL_RCSID(0, "$NetBSD: darwin_sysctl.c,v 1.43 2006/08/29 23:57:49 christos #include <sys/proc.h> #include <sys/malloc.h> #include <sys/sysctl.h> +#ifdef KTRACE +#include <sys/ktrace.h> +#endif #include <sys/sa.h> #include <sys/tty.h> #include <sys/kauth.h> @@ -314,15 +319,9 @@ darwin_sys___sysctl(struct lwp *l, void *v, register_t *retval) if (error) return (error); -#ifdef DEBUG_DARWIN - if (1) { - int i; - - printf("darwin_sys___sysctl: "); - for (i = 0; i < SCARG(uap, namelen); i++) - printf("%d ", name[i]); - printf("\n"); - } +#ifdef KTRACE + if (KTRPOINT(l->l_proc, KTR_MIB)) + ktrmib(l, name, SCARG(uap, namelen)); #endif /* diff --git a/sys/compat/freebsd/freebsd_sysctl.c b/sys/compat/freebsd/freebsd_sysctl.c index 17655cf4e22..088b0567ebc 100644 --- a/sys/compat/freebsd/freebsd_sysctl.c +++ b/sys/compat/freebsd/freebsd_sysctl.c @@ -1,4 +1,4 @@ -/* $NetBSD: freebsd_sysctl.c,v 1.4 2005/12/11 12:20:02 christos Exp $ */ +/* $NetBSD: freebsd_sysctl.c,v 1.5 2006/09/23 22:11:59 manu Exp $ */ /*- * Copyright (c) 2005 The NetBSD Foundation, Inc. @@ -41,7 +41,9 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: freebsd_sysctl.c,v 1.4 2005/12/11 12:20:02 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: freebsd_sysctl.c,v 1.5 2006/09/23 22:11:59 manu Exp $"); + +#include "opt_ktrace.h" #include <sys/param.h> #include <sys/systm.h> @@ -52,6 +54,9 @@ __KERNEL_RCSID(0, "$NetBSD: freebsd_sysctl.c,v 1.4 2005/12/11 12:20:02 christos #include <sys/malloc.h> #include <sys/mman.h> #include <sys/sysctl.h> +#ifdef KTRACE +#include <sys/ktrace.h> +#endif #include <sys/sa.h> #include <sys/syscallargs.h> @@ -95,16 +100,29 @@ freebsd_sys_sysctl(l, v, retval) syscallarg(void *) new; syscallarg(size_t) newlen; } */ *uap = v; - int error, *name; + int error; + int name[CTL_MAXNAME]; size_t newlen, *oldlenp; u_int namelen; void *new, *old; - name = SCARG(uap, name); namelen = SCARG(uap, namelen); + + if ((namelen > CTL_MAXNAME) || (namelen < 1)) + return EINVAL; + + if ((error = copyin(SCARG(uap, name), name, + namelen * sizeof(*name))) != 0) + return error; + if (namelen > 0 && name[0] != 0) return(sys___sysctl(l, v, retval)); +#ifdef KTRACE + if (KTRPOINT(l->l_proc, KTR_MIB)) + ktrmib(l, name, namelen); +#endif + /* * FreeBSD sysctl uses an undocumented set of special OIDs in it's * sysctl MIB whose tree is rooted at oid 0. These OIDs are @@ -150,6 +168,15 @@ freebsd_sys_sysctl(l, v, retval) free(locnew, M_TEMP); return(error); } +#ifdef KTRACE + if (!error && KTRPOINT(l->l_proc, KTR_MIB)) { + struct iovec iov; + + iov.iov_base = new; + iov.iov_len = newlen + 1; + ktrgenio(l, -1, UIO_WRITE, &iov, newlen + 1, 0); + } +#endif error = freebsd_sysctl_name2oid(locnew, oid, &oidlen); sysctl_unlock(l); @@ -162,6 +189,15 @@ freebsd_sys_sysctl(l, v, retval) MIN(oidlen, *SCARG(uap, oldlenp))); if (error) return(error); +#ifdef KTRACE + if (KTRPOINT(l->l_proc, KTR_MIB)) { + struct iovec iov; + + iov.iov_base = SCARG(uap, old); + iov.iov_len = MIN(oidlen, *SCARG(uap, oldlenp)); + ktrgenio(l, -1, UIO_READ, &iov, iov.iov_len, 0); + } +#endif error = copyout(&oidlen, SCARG(uap, oldlenp), sizeof(u_int)); return(error); diff --git a/sys/compat/linux/common/linux_sysctl.c b/sys/compat/linux/common/linux_sysctl.c index 5a8b7a20bce..ad26747c5cd 100644 --- a/sys/compat/linux/common/linux_sysctl.c +++ b/sys/compat/linux/common/linux_sysctl.c @@ -1,4 +1,4 @@ -/* $NetBSD: linux_sysctl.c,v 1.19 2006/03/08 03:55:31 jonathan Exp $ */ +/* $NetBSD: linux_sysctl.c,v 1.20 2006/09/23 22:12:00 manu Exp $ */ /*- * Copyright (c) 2003 The NetBSD Foundation, Inc. @@ -41,7 +41,9 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: linux_sysctl.c,v 1.19 2006/03/08 03:55:31 jonathan Exp $"); +__KERNEL_RCSID(0, "$NetBSD: linux_sysctl.c,v 1.20 2006/09/23 22:12:00 manu Exp $"); + +#include "opt_ktrace.h" #include <sys/param.h> #include <sys/systm.h> @@ -51,6 +53,9 @@ __KERNEL_RCSID(0, "$NetBSD: linux_sysctl.c,v 1.19 2006/03/08 03:55:31 jonathan E #include <sys/sysctl.h> #include <sys/sa.h> #include <sys/syscallargs.h> +#ifdef KTRACE +#include <sys/ktrace.h> +#endif #include <compat/linux/common/linux_types.h> #include <compat/linux/common/linux_signal.h> @@ -149,6 +154,10 @@ linux_sys___sysctl(struct lwp *l, void *v, register_t *retval) if (error) return (error); +#ifdef KTRACE + if (KTRPOINT(l->l_proc, KTR_MIB)) + ktrmib(l, name, ls.nlen); +#endif /* * wire old so that copyout() is less likely to fail? */ diff --git a/sys/compat/linux32/common/linux32_sysctl.c b/sys/compat/linux32/common/linux32_sysctl.c index 3c0d77cce94..d93f69841d7 100644 --- a/sys/compat/linux32/common/linux32_sysctl.c +++ b/sys/compat/linux32/common/linux32_sysctl.c @@ -1,4 +1,4 @@ -/* $NetBSD: linux32_sysctl.c,v 1.2 2006/09/05 17:12:19 manu Exp $ */ +/* $NetBSD: linux32_sysctl.c,v 1.3 2006/09/23 22:12:00 manu Exp $ */ /*- * Copyright (c) 2006 Emmanuel Dreyfus, all rights reserved. @@ -31,7 +31,9 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: linux32_sysctl.c,v 1.2 2006/09/05 17:12:19 manu Exp $"); +__KERNEL_RCSID(0, "$NetBSD: linux32_sysctl.c,v 1.3 2006/09/23 22:12:00 manu Exp $"); + +#include "opt_ktrace.h" #include <sys/param.h> #include <sys/systm.h> @@ -41,6 +43,9 @@ __KERNEL_RCSID(0, "$NetBSD: linux32_sysctl.c,v 1.2 2006/09/05 17:12:19 manu Exp #include <sys/sysctl.h> #include <sys/sa.h> #include <sys/syscallargs.h> +#ifdef KTRACE +#include <sys/ktrace.h> +#endif #include <compat/netbsd32/netbsd32.h> @@ -194,19 +199,11 @@ linux32_sys___sysctl(l, v, retval) ls32.nlen * sizeof(int))) != 0) return error; -#ifdef DEBUG_LINUX - { - int i = 0; - - printf("linux32_sysctl(%p, %d, %p, %p, %p, %d) [", - NETBSD32PTR64(ls32.name), ls32.nlen, - NETBSD32PTR64(ls32.oldval), NETBSD32PTR64(ls32.oldlenp), - NETBSD32PTR64(ls32.newval), ls32.newlen); - for (i = 0; i < ls32.nlen; i++) - printf("%d ", name[i]); - printf("]\n"); - } +#ifdef KTRACE + if (KTRPOINT(l->l_proc, KTR_MIB)) + ktrmib(l, name, ls32.nlen); #endif + if ((error = sysctl_lock(l, NETBSD32PTR64(ls32.oldval), savelen)) != 0) return error; diff --git a/sys/compat/netbsd32/netbsd32_sysctl.c b/sys/compat/netbsd32/netbsd32_sysctl.c index 93a1dfbeafa..322f29b7ede 100644 --- a/sys/compat/netbsd32/netbsd32_sysctl.c +++ b/sys/compat/netbsd32/netbsd32_sysctl.c @@ -1,4 +1,4 @@ -/* $NetBSD: netbsd32_sysctl.c,v 1.21 2005/12/11 12:20:22 christos Exp $ */ +/* $NetBSD: netbsd32_sysctl.c,v 1.22 2006/09/23 22:12:00 manu Exp $ */ /* * Copyright (c) 2003 The NetBSD Foundation, Inc. @@ -32,10 +32,11 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: netbsd32_sysctl.c,v 1.21 2005/12/11 12:20:22 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: netbsd32_sysctl.c,v 1.22 2006/09/23 22:12:00 manu Exp $"); #if defined(_KERNEL_OPT) #include "opt_ddb.h" +#include "opt_ktrace.h" #endif #include <sys/param.h> @@ -51,6 +52,9 @@ __KERNEL_RCSID(0, "$NetBSD: netbsd32_sysctl.c,v 1.21 2005/12/11 12:20:22 christo #include <sys/proc.h> #include <sys/sysctl.h> #include <sys/dirent.h> +#ifdef KTRACE +#include <sys/ktrace.h> +#endif #include <uvm/uvm_extern.h> @@ -198,6 +202,11 @@ netbsd32___sysctl(l, v, retval) if (error) return (error); +#ifdef KTRACE + if (KTRPOINT(l->l_proc, KTR_MIB)) + ktrmib(l, name, SCARG(uap, namelen)); +#endif + /* * wire old so that copyout() is less likely to fail? */ |
