On Tue, Jul 12, 2011, Otto Moerbeek wrote:
> The diff below implements utrace(2), a syscall to introduce data into
> a ktrace stream from a userland program.
> Index: sys/kern/kern_ktrace.c
> ===================================================================
> RCS file: /cvs/src/sys/kern/kern_ktrace.c,v
> retrieving revision 1.54
> diff -u -p -r1.54 kern_ktrace.c
> --- sys/kern/kern_ktrace.c 11 Jul 2011 15:40:47 -0000 1.54
> +++ sys/kern/kern_ktrace.c 12 Jul 2011 14:59:03 -0000
> +int
> +ktruser(struct proc *p, const char *id, void *addr, size_t len, int ustr)
> +{
> + struct ktr_header kth;
> + struct ktr_user *ktp;
> + int error;
> +
> + if (!KTRPOINT(p, KTR_USER))
> + return (0);
> + if (len > KTR_USER_MAXLEN)
> + return ENOSPC;
> +
> + p->p_traceflag |= KTRFAC_ACTIVE;
> + ktrinitheader(&kth, p, KTR_USER);
> + ktp = malloc(sizeof(*ktp) + len, M_TEMP, M_WAITOK);
> + bzero(ktp->ktr_id, KTR_USER_MAXIDLEN);
> + if (ustr) {
> + error = copyinstr(id, ktp->ktr_id, KTR_USER_MAXIDLEN, NULL);
> + if (error)
> + goto out;
> + } else
> + strlcpy(ktp->ktr_id, id, KTR_USER_MAXIDLEN);
There is only one caller, so we don't need the ustr argument.
> +sys_utrace(struct proc *curp, void *v, register_t *retval)
> +{
> + struct sys_utrace_args /* {
> + syscallarg(const char *) label;
> + syscallarg(void) addr;
missing * here.