diff options
author | bde <bde@FreeBSD.org> | 1998-07-15 04:43:49 +0000 |
---|---|---|
committer | bde <bde@FreeBSD.org> | 1998-07-15 04:43:49 +0000 |
commit | 74477c961e2a787403c0bea13c55ce9a4143e7ec (patch) | |
tree | fef0836b5228c3d4f101871dc4637fbb6853c198 /sys/kern/sys_process.c | |
parent | 0883088b05b344b5d8e9db4779e3fe152da60c5a (diff) | |
download | FreeBSD-src-74477c961e2a787403c0bea13c55ce9a4143e7ec.zip FreeBSD-src-74477c961e2a787403c0bea13c55ce9a4143e7ec.tar.gz |
Cast function pointers to uintfptr_t before casting them to u_long.
Hopefully caddr_t is large enough to hold function pointers.
Cast object pointers to uintptr_t before casting them to u_long.
Types are wronger than usual for the PT_READ_U case. ptrace() can
only return ints, but longs are accessed.
Diffstat (limited to 'sys/kern/sys_process.c')
-rw-r--r-- | sys/kern/sys_process.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/sys/kern/sys_process.c b/sys/kern/sys_process.c index bc45495..c67509f 100644 --- a/sys/kern/sys_process.c +++ b/sys/kern/sys_process.c @@ -28,7 +28,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: sys_process.c,v 1.37 1998/05/19 00:00:12 tegge Exp $ + * $Id: sys_process.c,v 1.38 1998/06/07 17:11:39 dfr Exp $ */ #include <sys/param.h> @@ -338,7 +338,8 @@ ptrace(curp, uap) if (uap->addr != (caddr_t)1) { fill_eproc (p, &p->p_addr->u_kproc.kp_eproc); - if ((error = ptrace_set_pc (p, (u_long)uap->addr))) { + if ((error = ptrace_set_pc (p, + (u_long)(uintfptr_t)uap->addr))) { PRELE(p); return error; } @@ -384,7 +385,7 @@ ptrace(curp, uap) iov.iov_len = sizeof(int); uio.uio_iov = &iov; uio.uio_iovcnt = 1; - uio.uio_offset = (off_t)(u_long)uap->addr; + uio.uio_offset = (off_t)(uintptr_t)uap->addr; uio.uio_resid = sizeof(int); uio.uio_segflg = UIO_SYSSPACE; /* ie: the uap */ uio.uio_rw = write ? UIO_WRITE : UIO_READ; @@ -406,7 +407,7 @@ ptrace(curp, uap) return (error); case PT_READ_U: - if ((u_long)uap->addr > (UPAGES * PAGE_SIZE - sizeof(long))) { + if ((uintptr_t)uap->addr > UPAGES * PAGE_SIZE - sizeof(long)) { return EFAULT; } if (ptrace_read_u_check(p,(vm_offset_t) uap->addr, @@ -419,7 +420,8 @@ ptrace(curp, uap) if (p->p_flag & P_INMEM) { p->p_addr->u_kproc.kp_proc = *p; fill_eproc (p, &p->p_addr->u_kproc.kp_eproc); - curp->p_retval[0] = *(long*)((u_long)p->p_addr + (u_long)uap->addr); + curp->p_retval[0] = *(long *) + ((uintptr_t)p->p_addr + (uintptr_t)uap->addr); } else { curp->p_retval[0] = 0; error = EFAULT; |