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.

Reply via email to