Module Name: src
Committed By: pooka
Date: Mon Dec 9 16:45:23 UTC 2013
Modified Files:
src/sys/conf: files
src/sys/kern: kern_ktrace.c
src/sys/sys: ktrace.h
Added Files:
src/sys/kern: kern_ktrace_vfs.c
Log Message:
Put vfs bits of ktrace into kern_ktrace_vfs.c per convention.
To generate a diff of this commit:
cvs rdiff -u -r1.1081 -r1.1082 src/sys/conf/files
cvs rdiff -u -r1.163 -r1.164 src/sys/kern/kern_ktrace.c
cvs rdiff -u -r0 -r1.1 src/sys/kern/kern_ktrace_vfs.c
cvs rdiff -u -r1.59 -r1.60 src/sys/sys/ktrace.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/conf/files
diff -u src/sys/conf/files:1.1081 src/sys/conf/files:1.1082
--- src/sys/conf/files:1.1081 Tue Oct 15 15:13:17 2013
+++ src/sys/conf/files Mon Dec 9 16:45:23 2013
@@ -1,4 +1,4 @@
-# $NetBSD: files,v 1.1081 2013/10/15 15:13:17 skrll Exp $
+# $NetBSD: files,v 1.1082 2013/12/09 16:45:23 pooka Exp $
# @(#)files.newconf 7.5 (Berkeley) 5/10/93
version 20100430
@@ -1505,6 +1505,7 @@ file kern/kern_idle.c
file kern/kern_hook.c
file kern/kern_kthread.c
file kern/kern_ktrace.c ktrace
+file kern/kern_ktrace_vfs.c ktrace
file kern/kern_ksyms.c ksyms | ddb | modular needs-flag
file kern/kern_lock.c
file kern/kern_lwp.c
Index: src/sys/kern/kern_ktrace.c
diff -u src/sys/kern/kern_ktrace.c:1.163 src/sys/kern/kern_ktrace.c:1.164
--- src/sys/kern/kern_ktrace.c:1.163 Mon Sep 16 09:25:56 2013
+++ src/sys/kern/kern_ktrace.c Mon Dec 9 16:45:23 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: kern_ktrace.c,v 1.163 2013/09/16 09:25:56 martin Exp $ */
+/* $NetBSD: kern_ktrace.c,v 1.164 2013/12/09 16:45:23 pooka Exp $ */
/*-
* Copyright (c) 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -61,14 +61,12 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_ktrace.c,v 1.163 2013/09/16 09:25:56 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_ktrace.c,v 1.164 2013/12/09 16:45:23 pooka Exp $");
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/proc.h>
#include <sys/file.h>
-#include <sys/namei.h>
-#include <sys/vnode.h>
#include <sys/kernel.h>
#include <sys/kthread.h>
#include <sys/ktrace.h>
@@ -131,7 +129,6 @@ struct ktr_desc {
static int ktealloc(struct ktrace_entry **, void **, lwp_t *, int,
size_t);
static void ktrwrite(struct ktr_desc *, struct ktrace_entry *);
-static int ktrace_common(lwp_t *, int, int, int, file_t **);
static int ktrops(lwp_t *, struct proc *, int, int,
struct ktr_desc *);
static int ktrsetchildren(lwp_t *, struct proc *, int, int,
@@ -221,23 +218,6 @@ ktd_logerr(struct proc *p, int error)
}
#endif
-static inline int
-ktrenter(lwp_t *l)
-{
-
- if ((l->l_pflag & LP_KTRACTIVE) != 0)
- return 1;
- l->l_pflag |= LP_KTRACTIVE;
- return 0;
-}
-
-static inline void
-ktrexit(lwp_t *l)
-{
-
- l->l_pflag &= ~LP_KTRACTIVE;
-}
-
static int
ktrace_listener_cb(kauth_cred_t cred, kauth_action_t action, void *cookie,
void *arg0, void *arg1, void *arg2, void *arg3)
@@ -1190,75 +1170,6 @@ sys_fktrace(struct lwp *l, const struct
return error;
}
-/*
- * ktrace system call
- */
-/* ARGSUSED */
-int
-sys_ktrace(struct lwp *l, const struct sys_ktrace_args *uap, register_t *retval)
-{
- /* {
- syscallarg(const char *) fname;
- syscallarg(int) ops;
- syscallarg(int) facs;
- syscallarg(int) pid;
- } */
- struct vnode *vp = NULL;
- file_t *fp = NULL;
- struct pathbuf *pb;
- struct nameidata nd;
- int error = 0;
- int fd;
-
- if (ktrenter(l))
- return EAGAIN;
-
- if (KTROP(SCARG(uap, ops)) != KTROP_CLEAR) {
- /*
- * an operation which requires a file argument.
- */
- error = pathbuf_copyin(SCARG(uap, fname), &pb);
- if (error) {
- ktrexit(l);
- return (error);
- }
- NDINIT(&nd, LOOKUP, FOLLOW, pb);
- if ((error = vn_open(&nd, FREAD|FWRITE, 0)) != 0) {
- pathbuf_destroy(pb);
- ktrexit(l);
- return (error);
- }
- vp = nd.ni_vp;
- pathbuf_destroy(pb);
- VOP_UNLOCK(vp);
- if (vp->v_type != VREG) {
- vn_close(vp, FREAD|FWRITE, l->l_cred);
- ktrexit(l);
- return (EACCES);
- }
- /*
- * This uses up a file descriptor slot in the
- * tracing process for the duration of this syscall.
- * This is not expected to be a problem.
- */
- if ((error = fd_allocfile(&fp, &fd)) != 0) {
- vn_close(vp, FWRITE, l->l_cred);
- ktrexit(l);
- return error;
- }
- fp->f_flag = FWRITE;
- fp->f_type = DTYPE_VNODE;
- fp->f_ops = &vnops;
- fp->f_data = (void *)vp;
- vp = NULL;
- }
- error = ktrace_common(l, SCARG(uap, ops), SCARG(uap, facs),
- SCARG(uap, pid), &fp);
- if (KTROP(SCARG(uap, ops)) != KTROP_CLEAR)
- fd_abort(curproc, fp, fd);
- return (error);
-}
-
int
ktrops(lwp_t *curl, struct proc *p, int ops, int facs,
struct ktr_desc *ktd)
Index: src/sys/sys/ktrace.h
diff -u src/sys/sys/ktrace.h:1.59 src/sys/sys/ktrace.h:1.60
--- src/sys/sys/ktrace.h:1.59 Sun Feb 19 21:06:58 2012
+++ src/sys/sys/ktrace.h Mon Dec 9 16:45:23 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: ktrace.h,v 1.59 2012/02/19 21:06:58 rmind Exp $ */
+/* $NetBSD: ktrace.h,v 1.60 2013/12/09 16:45:23 pooka Exp $ */
/*
* Copyright (c) 1988, 1993
@@ -298,6 +298,25 @@ void ktr_execarg(const void *, size_t);
void ktr_execenv(const void *, size_t);
void ktr_execfd(int, u_int);
+int ktrace_common(lwp_t *, int, int, int, file_t **);
+
+static inline int
+ktrenter(lwp_t *l)
+{
+
+ if ((l->l_pflag & LP_KTRACTIVE) != 0)
+ return 1;
+ l->l_pflag |= LP_KTRACTIVE;
+ return 0;
+}
+
+static inline void
+ktrexit(lwp_t *l)
+{
+
+ l->l_pflag &= ~LP_KTRACTIVE;
+}
+
static inline bool
ktrpoint(int fac)
{
Added files:
Index: src/sys/kern/kern_ktrace_vfs.c
diff -u /dev/null src/sys/kern/kern_ktrace_vfs.c:1.1
--- /dev/null Mon Dec 9 16:45:23 2013
+++ src/sys/kern/kern_ktrace_vfs.c Mon Dec 9 16:45:23 2013
@@ -0,0 +1,147 @@
+/* $NetBSD: kern_ktrace_vfs.c,v 1.1 2013/12/09 16:45:23 pooka Exp $ */
+
+/*-
+ * Copyright (c) 2006, 2007, 2008 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Andrew Doran.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Copyright (c) 1989, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)kern_ktrace.c 8.5 (Berkeley) 5/14/95
+ */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: kern_ktrace_vfs.c,v 1.1 2013/12/09 16:45:23 pooka Exp $");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/file.h>
+#include <sys/filedesc.h>
+#include <sys/namei.h>
+#include <sys/vnode.h>
+#include <sys/kernel.h>
+#include <sys/ktrace.h>
+#include <sys/kauth.h>
+
+#include <sys/mount.h>
+#include <sys/syscallargs.h>
+
+/*
+ * ktrace system call, the part of the ktrace framework that
+ * explicitly interacts with VFS
+ */
+/* ARGSUSED */
+int
+sys_ktrace(struct lwp *l, const struct sys_ktrace_args *uap, register_t *retval)
+{
+ /* {
+ syscallarg(const char *) fname;
+ syscallarg(int) ops;
+ syscallarg(int) facs;
+ syscallarg(int) pid;
+ } */
+ struct vnode *vp = NULL;
+ file_t *fp = NULL;
+ struct pathbuf *pb;
+ struct nameidata nd;
+ int error = 0;
+ int fd;
+
+ if (ktrenter(l))
+ return EAGAIN;
+
+ if (KTROP(SCARG(uap, ops)) != KTROP_CLEAR) {
+ /*
+ * an operation which requires a file argument.
+ */
+ error = pathbuf_copyin(SCARG(uap, fname), &pb);
+ if (error) {
+ ktrexit(l);
+ return (error);
+ }
+ NDINIT(&nd, LOOKUP, FOLLOW, pb);
+ if ((error = vn_open(&nd, FREAD|FWRITE, 0)) != 0) {
+ pathbuf_destroy(pb);
+ ktrexit(l);
+ return (error);
+ }
+ vp = nd.ni_vp;
+ pathbuf_destroy(pb);
+ VOP_UNLOCK(vp);
+ if (vp->v_type != VREG) {
+ vn_close(vp, FREAD|FWRITE, l->l_cred);
+ ktrexit(l);
+ return (EACCES);
+ }
+ /*
+ * This uses up a file descriptor slot in the
+ * tracing process for the duration of this syscall.
+ * This is not expected to be a problem.
+ */
+ if ((error = fd_allocfile(&fp, &fd)) != 0) {
+ vn_close(vp, FWRITE, l->l_cred);
+ ktrexit(l);
+ return error;
+ }
+ fp->f_flag = FWRITE;
+ fp->f_type = DTYPE_VNODE;
+ fp->f_ops = &vnops;
+ fp->f_data = (void *)vp;
+ vp = NULL;
+ }
+ error = ktrace_common(l, SCARG(uap, ops), SCARG(uap, facs),
+ SCARG(uap, pid), &fp);
+ if (KTROP(SCARG(uap, ops)) != KTROP_CLEAR)
+ fd_abort(curproc, fp, fd);
+ return (error);
+}