server: Make the address argument for read/write_process_memory a client_ptr_t.
diff --git a/server/ptrace.c b/server/ptrace.c
index 343e38e..accaf4d 100644
--- a/server/ptrace.c
+++ b/server/ptrace.c
@@ -354,7 +354,7 @@
 }
 
 /* read data from a process memory space */
-int read_process_memory( struct process *process, const void *ptr, data_size_t size, char *dest )
+int read_process_memory( struct process *process, client_ptr_t ptr, data_size_t size, char *dest )
 {
     struct thread *thread = get_ptrace_thread( process );
     unsigned int first_offset, last_offset, len;
@@ -362,11 +362,17 @@
 
     if (!thread) return 0;
 
-    first_offset = (unsigned long)ptr % sizeof(int);
+    if ((unsigned long)ptr != ptr)
+    {
+        set_error( STATUS_ACCESS_DENIED );
+        return 0;
+    }
+
+    first_offset = ptr % sizeof(int);
     last_offset = (size + first_offset) % sizeof(int);
     if (!last_offset) last_offset = sizeof(int);
 
-    addr = (int *)((char *)ptr - first_offset);
+    addr = (int *)(unsigned long)(ptr - first_offset);
     len = (size + first_offset + sizeof(int) - 1) / sizeof(int);
 
     if (suspend_for_ptrace( thread ))
@@ -415,7 +421,7 @@
 }
 
 /* write data to a process memory space */
-int write_process_memory( struct process *process, void *ptr, data_size_t size, const char *src )
+int write_process_memory( struct process *process, client_ptr_t ptr, data_size_t size, const char *src )
 {
     struct thread *thread = get_ptrace_thread( process );
     int ret = 0, data = 0;
@@ -425,9 +431,15 @@
 
     if (!thread) return 0;
 
+    if ((unsigned long)ptr != ptr)
+    {
+        set_error( STATUS_ACCESS_DENIED );
+        return 0;
+    }
+
     /* compute the mask for the first int */
     first_mask = ~0;
-    first_offset = (unsigned long)ptr % sizeof(int);
+    first_offset = ptr % sizeof(int);
     memset( &first_mask, 0, first_offset );
 
     /* compute the mask for the last int */
@@ -436,7 +448,7 @@
     last_mask = 0;
     memset( &last_mask, 0xff, last_offset );
 
-    addr = (int *)((char *)ptr - first_offset);
+    addr = (int *)(unsigned long)(ptr - first_offset);
     len = (size + first_offset + sizeof(int) - 1) / sizeof(int);
 
     if (suspend_for_ptrace( thread ))