summaryrefslogtreecommitdiffstats
path: root/sys/kern/sys_process.c
diff options
context:
space:
mode:
authorbde <bde@FreeBSD.org>1998-07-15 04:43:49 +0000
committerbde <bde@FreeBSD.org>1998-07-15 04:43:49 +0000
commit74477c961e2a787403c0bea13c55ce9a4143e7ec (patch)
treefef0836b5228c3d4f101871dc4637fbb6853c198 /sys/kern/sys_process.c
parent0883088b05b344b5d8e9db4779e3fe152da60c5a (diff)
downloadFreeBSD-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.c12
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;
OpenPOWER on IntegriCloud