I wanted to quickly debug some program without actually dumping to disk
by using FIFOs, however ktrace(2) wouldn't accept anything but regular
files.

Are there any pitfalls or limitations I am currently not aware of that
justify this strict behaviour?

        $ ln -s some.file link
        $ ktrace -a -f link echo foo
        ktrace: link: Too many levels of symbolic links

        $ mkfifo fifo && cat fifo >/dev/null &
        $ ktrace -a -f fifo echo foo
        ktrace: fifo: Permission denied


With this tiny patch ktrace(2) allows appending to FIFOs, which enables
me to do the following:

        $ mkfifo ktrace.out && kdump -l &
        $ ktrace -a echo foo
        foo
         1903 ktrace   RET   ktrace 0
         1903 ktrace   CALL  
execve(0x7f7ffffe6d50,0x7f7ffffe72e8,0x7f7ffffe7300)
        [...]
        $ ktrace -a echo bar
        bar
         94065 ktrace   RET   ktrace 0
         94065 ktrace   CALL  
execve(0x7f7ffffe2280,0x7f7ffffe2818,0x7f7ffffe2830)
        [...]


Feedback? OK?

Index: kern_ktrace.c
===================================================================
RCS file: /cvs/src/sys/kern/kern_ktrace.c,v
retrieving revision 1.91
diff -u -p -r1.91 kern_ktrace.c
--- kern_ktrace.c       14 Feb 2017 10:31:15 -0000      1.91
+++ kern_ktrace.c       20 Jun 2017 22:01:56 -0000
@@ -428,7 +428,7 @@ sys_ktrace(struct proc *p, void *v, regi
                vp = nd.ni_vp;

                VOP_UNLOCK(vp, p);
-               if (vp->v_type != VREG) {
+               if (vp->v_type != VREG && vp->v_type != VFIFO) {
                        error = EACCES;
                        goto done;
                }

Reply via email to