Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys Put vfs bits of ktrace into kern_ktrace_vfs.c per conven...



details:   https://anonhg.NetBSD.org/src/rev/13b2e461f517
branches:  trunk
changeset: 325160:13b2e461f517
user:      pooka <pooka%NetBSD.org@localhost>
date:      Mon Dec 09 16:45:23 2013 +0000

description:
Put vfs bits of ktrace into kern_ktrace_vfs.c per convention.

diffstat:

 sys/conf/files             |    3 +-
 sys/kern/kern_ktrace.c     |   93 +---------------------------
 sys/kern/kern_ktrace_vfs.c |  147 +++++++++++++++++++++++++++++++++++++++++++++
 sys/sys/ktrace.h           |   21 ++++++-
 4 files changed, 171 insertions(+), 93 deletions(-)

diffs (truncated from 336 to 300 lines):

diff -r f9d75cd32061 -r 13b2e461f517 sys/conf/files
--- a/sys/conf/files    Mon Dec 09 16:35:12 2013 +0000
+++ b/sys/conf/files    Mon Dec 09 16:45:23 2013 +0000
@@ -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_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
diff -r f9d75cd32061 -r 13b2e461f517 sys/kern/kern_ktrace.c
--- a/sys/kern/kern_ktrace.c    Mon Dec 09 16:35:12 2013 +0000
+++ b/sys/kern/kern_ktrace.c    Mon Dec 09 16:45:23 2013 +0000
@@ -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 @@
 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 @@
 }
 #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 @@
        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)
diff -r f9d75cd32061 -r 13b2e461f517 sys/kern/kern_ktrace_vfs.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/kern/kern_ktrace_vfs.c        Mon Dec 09 16:45:23 2013 +0000
@@ -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);



Home | Main Index | Thread Index | Old Index