diff options
author | dt <dt@FreeBSD.org> | 1999-06-16 18:37:01 +0000 |
---|---|---|
committer | dt <dt@FreeBSD.org> | 1999-06-16 18:37:01 +0000 |
commit | 9759e5e6dfd953221f2dbf7277a55e34cb762359 (patch) | |
tree | 5914dcf39996597efe73f61f6008f641d997d996 /sys/kern/kern_ktrace.c | |
parent | 792005e7a3bcd6f47d918a4cdda031e0728327c7 (diff) | |
download | FreeBSD-src-9759e5e6dfd953221f2dbf7277a55e34cb762359.zip FreeBSD-src-9759e5e6dfd953221f2dbf7277a55e34cb762359.tar.gz |
Make sure syscall arguments properly aligned in ktrace records.
Make syscall return value a register_t.
Based on a patch from Hidetoshi Shimokawa.
Mostly reviewed by: Hidetoshi Shimokawa and Bruce Evans.
Diffstat (limited to 'sys/kern/kern_ktrace.c')
-rw-r--r-- | sys/kern/kern_ktrace.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/sys/kern/kern_ktrace.c b/sys/kern/kern_ktrace.c index 86579cb..939888e 100644 --- a/sys/kern/kern_ktrace.c +++ b/sys/kern/kern_ktrace.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)kern_ktrace.c 8.2 (Berkeley) 9/23/93 - * $Id: kern_ktrace.c,v 1.25 1998/12/10 01:47:41 rvb Exp $ + * $Id: kern_ktrace.c,v 1.26 1999/04/28 11:36:55 phk Exp $ */ #include "opt_ktrace.h" @@ -49,6 +49,8 @@ #include <sys/malloc.h> #include <sys/syslog.h> +#include <stddef.h> + static MALLOC_DEFINE(M_KTRACE, "KTRACE", "KTRACE"); #ifdef KTRACE @@ -78,20 +80,23 @@ ktrgetheader(type) void ktrsyscall(vp, code, narg, args) struct vnode *vp; - int code, narg, args[]; + int code, narg; + register_t args[]; { struct ktr_header *kth; struct ktr_syscall *ktp; - register int len = sizeof(struct ktr_syscall) + (narg * sizeof(int)); + register int len = offsetof(struct ktr_syscall, ktr_args) + + (narg * sizeof(register_t)); struct proc *p = curproc; /* XXX */ - int *argp, i; + register_t *argp; + int i; p->p_traceflag |= KTRFAC_ACTIVE; kth = ktrgetheader(KTR_SYSCALL); MALLOC(ktp, struct ktr_syscall *, len, M_KTRACE, M_WAITOK); ktp->ktr_code = code; ktp->ktr_narg = narg; - argp = (int *)((char *)ktp + sizeof(struct ktr_syscall)); + argp = &ktp->ktr_args[0]; for (i = 0; i < narg; i++) *argp++ = args[i]; kth->ktr_buf = (caddr_t)ktp; @@ -105,7 +110,8 @@ ktrsyscall(vp, code, narg, args) void ktrsysret(vp, code, error, retval) struct vnode *vp; - int code, error, retval; + int code, error; + register_t retval; { struct ktr_header *kth; struct ktr_sysret ktp; |