I/O ktrace of sendsyslog(2) did not work. As uiomove() adjusts
authorbluhm <bluhm@openbsd.org>
Mon, 28 Jul 2014 20:30:01 +0000 (20:30 +0000)
committerbluhm <bluhm@openbsd.org>
Mon, 28 Jul 2014 20:30:01 +0000 (20:30 +0000)
iov_len to 0, we need a propper length calculation.  While there,
use -1 for the file descriptor because 0 is reserved for stdin.
OK deraadt@ guenther@

sys/kern/subr_log.c

index b64872a..55d8fca 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: subr_log.c,v 1.21 2014/07/12 18:43:32 tedu Exp $      */
+/*     $OpenBSD: subr_log.c,v 1.22 2014/07/28 20:30:01 bluhm Exp $     */
 /*     $NetBSD: subr_log.c,v 1.11 1996/03/30 22:24:44 christos Exp $   */
 
 /*
@@ -349,6 +349,7 @@ sys_sendsyslog(struct proc *p, void *v, register_t *retval)
        struct iovec aiov;
        struct uio auio;
        struct file *f;
+       size_t len;
        int error;
 
        if (syslogf == NULL)
@@ -374,12 +375,15 @@ sys_sendsyslog(struct proc *p, void *v, register_t *retval)
        }
 #endif
 
+       len = auio.uio_resid;
        error = sosend(f->f_data, NULL, &auio, NULL, NULL, 0);
+       if (error == 0)
+               len -= auio.uio_resid;
 
 #ifdef KTRACE
        if (ktriov != NULL) {
                if (error == 0)
-                       ktrgenio(p, 0, UIO_WRITE, ktriov, aiov.iov_len);
+                       ktrgenio(p, -1, UIO_WRITE, ktriov, len);
                free(ktriov, M_TEMP, 0);
        }
 #endif