From 9759e5e6dfd953221f2dbf7277a55e34cb762359 Mon Sep 17 00:00:00 2001 From: dt Date: Wed, 16 Jun 1999 18:37:01 +0000 Subject: 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. --- sys/kern/kern_ktrace.c | 18 ++++++++++++------ sys/sys/ktrace.h | 11 ++++++----- 2 files changed, 18 insertions(+), 11 deletions(-) (limited to 'sys') 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 #include +#include + 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; diff --git a/sys/sys/ktrace.h b/sys/sys/ktrace.h index b5c1d44..b0382bd 100644 --- a/sys/sys/ktrace.h +++ b/sys/sys/ktrace.h @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)ktrace.h 8.1 (Berkeley) 6/2/93 - * $Id: ktrace.h,v 1.12 1997/02/22 09:45:26 peter Exp $ + * $Id: ktrace.h,v 1.13 1999/05/13 09:09:37 bde Exp $ */ #ifndef _SYS_KTRACE_H_ @@ -79,8 +79,9 @@ struct ktr_syscall { short ktr_code; /* syscall number */ short ktr_narg; /* number of arguments */ /* - * followed by ktr_narg ints + * followed by ktr_narg register_t */ + register_t ktr_args[1]; }; /* @@ -91,7 +92,7 @@ struct ktr_sysret { short ktr_code; short ktr_eosys; int ktr_error; - int ktr_retval; + register_t ktr_retval; }; /* @@ -160,8 +161,8 @@ void ktrnamei __P((struct vnode *,char *)); void ktrcsw __P((struct vnode *,int,int)); void ktrpsig __P((struct vnode *,int, sig_t, int, int)); void ktrgenio __P((struct vnode *,int, enum uio_rw,struct iovec *,int,int)); -void ktrsyscall __P((struct vnode *, int, int narg, int args[])); -void ktrsysret __P((struct vnode *, int, int, int)); +void ktrsyscall __P((struct vnode *, int, int narg, register_t args[])); +void ktrsysret __P((struct vnode *, int, int, register_t)); #else /* KERNEL */ -- cgit v1.1