Index: .gitignore
===================================================================
--- .gitignore	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ .gitignore	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -421,2 +421,3 @@
 uspace/srv/volsrv/test-volsrv
 uspace/srv/volsrv/volsrv
+uspace/drv/block/virtio-blk/virtio-blk
Index: abi/include/_bits/native.h
===================================================================
--- abi/include/_bits/native.h	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ abi/include/_bits/native.h	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -56,4 +56,18 @@
 typedef intptr_t  native_t;
 
+#ifdef KERNEL
+
+typedef sysarg_t uspace_addr_t;
+/* We might implement a way to check validity of the type some day. */
+#define uspace_ptr(type) uspace_addr_t
+#define USPACE_NULL 0
+
+#else /* !KERNEL */
+
+typedef void *uspace_addr_t;
+#define uspace_ptr(type) type *
+
+#endif
+
 __HELENOS_DECLS_END;
 
Index: abi/include/abi/proc/uarg.h
===================================================================
--- abi/include/abi/proc/uarg.h	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ abi/include/abi/proc/uarg.h	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -37,15 +37,18 @@
 
 #include <stddef.h>
+#include <_bits/native.h>
+
+typedef void (uspace_thread_function_t)(void *);
 
 /** Structure passed to uinit kernel thread as argument. */
 typedef struct uspace_arg {
-	void *uspace_entry;
-	void *uspace_stack;
+	uspace_addr_t uspace_entry;
+	uspace_addr_t uspace_stack;
 	size_t uspace_stack_size;
 
-	void (*uspace_thread_function)(void *);
-	void *uspace_thread_arg;
+	uspace_ptr(uspace_thread_function_t) uspace_thread_function;
+	uspace_addr_t uspace_thread_arg;
 
-	struct uspace_arg *uspace_uarg;
+	uspace_ptr(struct uspace_arg) uspace_uarg;
 } uspace_arg_t;
 
Index: kernel/arch/abs32le/src/abs32le.c
===================================================================
--- kernel/arch/abs32le/src/abs32le.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/arch/abs32le/src/abs32le.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -126,10 +126,10 @@
 }
 
-uintptr_t memcpy_from_uspace(void *dst, const void *uspace_src, size_t size)
+uintptr_t memcpy_from_uspace(void *dst, uspace_addr_t uspace_src, size_t size)
 {
 	return 0;
 }
 
-uintptr_t memcpy_to_uspace(void *uspace_dst, const void *src, size_t size)
+uintptr_t memcpy_to_uspace(uspace_addr_t uspace_dst, const void *src, size_t size)
 {
 	return 0;
Index: kernel/arch/amd64/src/debug/stacktrace.c
===================================================================
--- kernel/arch/amd64/src/debug/stacktrace.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/arch/amd64/src/debug/stacktrace.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -69,12 +69,12 @@
 bool uspace_frame_pointer_prev(stack_trace_context_t *ctx, uintptr_t *prev)
 {
-	return !copy_from_uspace((void *) prev,
-	    (uint64_t *) ctx->fp + FRAME_OFFSET_FP_PREV, sizeof(*prev));
+	return !copy_from_uspace(prev,
+	    ctx->fp + sizeof(uintptr_t) * FRAME_OFFSET_FP_PREV, sizeof(*prev));
 }
 
 bool uspace_return_address_get(stack_trace_context_t *ctx, uintptr_t *ra)
 {
-	return !copy_from_uspace((void *) ra,
-	    (uint64_t *) ctx->fp + FRAME_OFFSET_RA, sizeof(*ra));
+	return !copy_from_uspace(ra,
+	    ctx->fp + sizeof(uintptr_t) * FRAME_OFFSET_RA, sizeof(*ra));
 }
 
Index: kernel/arch/amd64/src/userspace.c
===================================================================
--- kernel/arch/amd64/src/userspace.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/arch/amd64/src/userspace.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -66,5 +66,5 @@
 	    "iretq\n"
 	    :: [udata_des] "i" (GDT_SELECTOR(UDATA_DES) | PL_USER),
-	      [stack_top] "r" ((uint8_t *) kernel_uarg->uspace_stack +
+	      [stack_top] "r" (kernel_uarg->uspace_stack +
 	      kernel_uarg->uspace_stack_size),
 	      [rflags] "r" (rflags),
Index: kernel/arch/arm32/src/debug/stacktrace.c
===================================================================
--- kernel/arch/arm32/src/debug/stacktrace.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/arch/arm32/src/debug/stacktrace.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -68,12 +68,12 @@
 bool uspace_frame_pointer_prev(stack_trace_context_t *ctx, uintptr_t *prev)
 {
-	return !copy_from_uspace((void *) prev,
-	    (uint32_t *) ctx->fp + FRAME_OFFSET_FP_PREV, sizeof(*prev));
+	return !copy_from_uspace(prev,
+	    ctx->fp + sizeof(uintptr_t) * FRAME_OFFSET_FP_PREV, sizeof(*prev));
 }
 
 bool uspace_return_address_get(stack_trace_context_t *ctx, uintptr_t *ra)
 {
-	return !copy_from_uspace((void *) ra,
-	    (uint32_t *) ctx->fp + FRAME_OFFSET_RA, sizeof(*ra));
+	return !copy_from_uspace(ra,
+	    ctx->fp + sizeof(uintptr_t) * FRAME_OFFSET_RA, sizeof(*ra));
 }
 
Index: kernel/arch/arm32/src/userspace.c
===================================================================
--- kernel/arch/arm32/src/userspace.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/arch/arm32/src/userspace.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -71,5 +71,5 @@
 
 	/* set first parameter */
-	ustate.r0 = (uintptr_t) kernel_uarg->uspace_uarg;
+	ustate.r0 = kernel_uarg->uspace_uarg;
 
 	/* %r1 is defined to hold pcb_ptr - set it to 0 */
@@ -93,9 +93,9 @@
 
 	/* set user stack */
-	ustate.sp = ((uint32_t) kernel_uarg->uspace_stack) +
+	ustate.sp = kernel_uarg->uspace_stack +
 	    kernel_uarg->uspace_stack_size;
 
 	/* set where uspace execution starts */
-	ustate.pc = (uintptr_t) kernel_uarg->uspace_entry;
+	ustate.pc = kernel_uarg->uspace_entry;
 
 	/* status register in user mode */
Index: kernel/arch/arm64/src/arm64.c
===================================================================
--- kernel/arch/arm64/src/arm64.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/arch/arm64/src/arm64.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -156,9 +156,9 @@
 
 	/* Set program entry. */
-	ELR_EL1_write((uint64_t) kernel_uarg->uspace_entry);
+	ELR_EL1_write(kernel_uarg->uspace_entry);
 
 	/* Set user stack. */
-	SP_EL0_write(((uint64_t) kernel_uarg->uspace_stack +
-	    kernel_uarg->uspace_stack_size));
+	SP_EL0_write(kernel_uarg->uspace_stack +
+	    kernel_uarg->uspace_stack_size);
 
 	/* Clear Thread ID register. */
Index: kernel/arch/arm64/src/debug/stacktrace.c
===================================================================
--- kernel/arch/arm64/src/debug/stacktrace.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/arch/arm64/src/debug/stacktrace.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -68,12 +68,12 @@
 bool uspace_frame_pointer_prev(stack_trace_context_t *ctx, uintptr_t *prev)
 {
-	return !copy_from_uspace((void *) prev,
-	    (uint64_t *) ctx->fp + FRAME_OFFSET_FP_PREV, sizeof(*prev));
+	return !copy_from_uspace(prev,
+	    ctx->fp + sizeof(uintptr_t) * FRAME_OFFSET_FP_PREV, sizeof(*prev));
 }
 
 bool uspace_return_address_get(stack_trace_context_t *ctx, uintptr_t *ra)
 {
-	return !copy_from_uspace((void *) ra,
-	    (uint64_t *) ctx->fp + FRAME_OFFSET_RA, sizeof(*ra));
+	return !copy_from_uspace(ra,
+	    ctx->fp + sizeof(uintptr_t) * FRAME_OFFSET_RA, sizeof(*ra));
 }
 
Index: kernel/arch/ia32/src/debug/stacktrace.c
===================================================================
--- kernel/arch/ia32/src/debug/stacktrace.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/arch/ia32/src/debug/stacktrace.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -67,12 +67,12 @@
 bool uspace_frame_pointer_prev(stack_trace_context_t *ctx, uintptr_t *prev)
 {
-	return !copy_from_uspace((void *) prev,
-	    (uint32_t *) ctx->fp + FRAME_OFFSET_FP_PREV, sizeof(*prev));
+	return !copy_from_uspace(prev,
+	    ctx->fp + sizeof(uintptr_t) * FRAME_OFFSET_FP_PREV, sizeof(*prev));
 }
 
 bool uspace_return_address_get(stack_trace_context_t *ctx, uintptr_t *ra)
 {
-	return !copy_from_uspace((void *) ra,
-	    (uint32_t *) ctx->fp + FRAME_OFFSET_RA, sizeof(*ra));
+	return !copy_from_uspace(ra,
+	    ctx->fp + sizeof(uintptr_t) * FRAME_OFFSET_RA, sizeof(*ra));
 }
 
Index: kernel/arch/ia32/src/userspace.c
===================================================================
--- kernel/arch/ia32/src/userspace.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/arch/ia32/src/userspace.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -70,5 +70,5 @@
 	    : [eflags_mask] "i" (~EFLAGS_NT),
 	      [udata_des] "i" (GDT_SELECTOR(UDATA_DES) | PL_USER),
-	      [stack_top] "r" ((uint8_t *) kernel_uarg->uspace_stack +
+	      [stack_top] "r" (kernel_uarg->uspace_stack +
 	      kernel_uarg->uspace_stack_size),
 	      [eflags] "r" ((eflags & ~(EFLAGS_NT)) | EFLAGS_IF),
Index: kernel/arch/ia64/src/ia64.c
===================================================================
--- kernel/arch/ia64/src/ia64.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/arch/ia64/src/ia64.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -244,11 +244,11 @@
 	 * uspace_stack_size / 2 bytes.
 	 */
-	switch_to_userspace((uintptr_t) kernel_uarg->uspace_entry,
-	    ((uintptr_t) kernel_uarg->uspace_stack) +
+	switch_to_userspace(kernel_uarg->uspace_entry,
+	    kernel_uarg->uspace_stack +
 	    kernel_uarg->uspace_stack_size / 2 -
 	    ALIGN_UP(STACK_ITEM_SIZE, STACK_ALIGNMENT),
-	    ((uintptr_t) kernel_uarg->uspace_stack) +
+	    kernel_uarg->uspace_stack +
 	    kernel_uarg->uspace_stack_size / 2,
-	    (uintptr_t) kernel_uarg->uspace_uarg, psr.value, rsc.value);
+	    kernel_uarg->uspace_uarg, psr.value, rsc.value);
 
 	while (true)
Index: kernel/arch/mips32/src/mips32.c
===================================================================
--- kernel/arch/mips32/src/mips32.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/arch/mips32/src/mips32.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -171,9 +171,9 @@
 	cp0_status_write(cp0_status_read() | (cp0_status_exl_exception_bit |
 	    cp0_status_um_bit | cp0_status_ie_enabled_bit));
-	cp0_epc_write((uintptr_t) kernel_uarg->uspace_entry);
-	userspace_asm(((uintptr_t) kernel_uarg->uspace_stack +
-	    kernel_uarg->uspace_stack_size),
-	    (uintptr_t) kernel_uarg->uspace_uarg,
-	    (uintptr_t) kernel_uarg->uspace_entry);
+	cp0_epc_write(kernel_uarg->uspace_entry);
+	userspace_asm(kernel_uarg->uspace_stack +
+	    kernel_uarg->uspace_stack_size,
+	    kernel_uarg->uspace_uarg,
+	    kernel_uarg->uspace_entry);
 
 	while (true)
Index: kernel/arch/ppc32/src/debug/stacktrace.c
===================================================================
--- kernel/arch/ppc32/src/debug/stacktrace.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/arch/ppc32/src/debug/stacktrace.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -67,12 +67,12 @@
 bool uspace_frame_pointer_prev(stack_trace_context_t *ctx, uintptr_t *prev)
 {
-	return !copy_from_uspace((void *) prev,
-	    (uint32_t *) ctx->fp + FRAME_OFFSET_FP_PREV, sizeof(*prev));
+	return !copy_from_uspace(prev,
+	    ctx->fp + sizeof(uintptr_t) * FRAME_OFFSET_FP_PREV, sizeof(*prev));
 }
 
 bool uspace_return_address_get(stack_trace_context_t *ctx, uintptr_t *ra)
 {
-	return !copy_from_uspace((void *) ra,
-	    (uint32_t *) ctx->fp + FRAME_OFFSET_RA, sizeof(*ra));
+	return !copy_from_uspace(ra,
+	    ctx->fp + sizeof(uintptr_t) * FRAME_OFFSET_RA, sizeof(*ra));
 }
 
Index: kernel/arch/ppc32/src/ppc32.c
===================================================================
--- kernel/arch/ppc32/src/ppc32.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/arch/ppc32/src/ppc32.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -292,8 +292,8 @@
 void userspace(uspace_arg_t *kernel_uarg)
 {
-	userspace_asm((uintptr_t) kernel_uarg->uspace_uarg,
-	    (uintptr_t) kernel_uarg->uspace_stack +
+	userspace_asm(kernel_uarg->uspace_uarg,
+	    kernel_uarg->uspace_stack +
 	    kernel_uarg->uspace_stack_size - SP_DELTA,
-	    (uintptr_t) kernel_uarg->uspace_entry);
+	    kernel_uarg->uspace_entry);
 
 	unreachable();
Index: kernel/arch/riscv64/src/riscv64.c
===================================================================
--- kernel/arch/riscv64/src/riscv64.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/arch/riscv64/src/riscv64.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -143,10 +143,10 @@
 }
 
-uintptr_t memcpy_from_uspace(void *dst, const void *uspace_src, size_t size)
+uintptr_t memcpy_from_uspace(void *dst, uspace_addr_t uspace_src, size_t size)
 {
 	return 0;
 }
 
-uintptr_t memcpy_to_uspace(void *uspace_dst, const void *src, size_t size)
+uintptr_t memcpy_to_uspace(uspace_addr_t uspace_dst, const void *src, size_t size)
 {
 	return 0;
Index: kernel/arch/sparc64/src/sun4u/sparc64.c
===================================================================
--- kernel/arch/sparc64/src/sun4u/sparc64.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/arch/sparc64/src/sun4u/sparc64.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -163,9 +163,9 @@
 {
 	(void) interrupts_disable();
-	switch_to_userspace((uintptr_t) kernel_uarg->uspace_entry,
-	    ((uintptr_t) kernel_uarg->uspace_stack) +
+	switch_to_userspace(kernel_uarg->uspace_entry,
+	    kernel_uarg->uspace_stack +
 	    kernel_uarg->uspace_stack_size -
 	    (ALIGN_UP(STACK_ITEM_SIZE, STACK_ALIGNMENT) + STACK_BIAS),
-	    (uintptr_t) kernel_uarg->uspace_uarg);
+	    kernel_uarg->uspace_uarg);
 
 	/* Not reached */
Index: kernel/arch/sparc64/src/sun4v/sparc64.c
===================================================================
--- kernel/arch/sparc64/src/sun4v/sparc64.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/arch/sparc64/src/sun4v/sparc64.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -161,9 +161,9 @@
 {
 	(void) interrupts_disable();
-	switch_to_userspace((uintptr_t) kernel_uarg->uspace_entry,
-	    ((uintptr_t) kernel_uarg->uspace_stack) +
+	switch_to_userspace(kernel_uarg->uspace_entry,
+	    kernel_uarg->uspace_stack +
 	    kernel_uarg->uspace_stack_size -
 	    (ALIGN_UP(STACK_ITEM_SIZE, STACK_ALIGNMENT) + STACK_BIAS),
-	    (uintptr_t) kernel_uarg->uspace_uarg);
+	    kernel_uarg->uspace_uarg);
 
 	/* Not reached */
Index: kernel/generic/include/console/console.h
===================================================================
--- kernel/generic/include/console/console.h	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/include/console/console.h	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -71,5 +71,5 @@
 extern wchar_t getc(indev_t *indev);
 extern size_t gets(indev_t *indev, char *buf, size_t buflen);
-extern sys_errno_t sys_kio(int cmd, const void *buf, size_t size);
+extern sys_errno_t sys_kio(int cmd, uspace_ptr(void) buf, size_t size);
 
 extern void grab_console(void);
Index: kernel/generic/include/ddi/ddi.h
===================================================================
--- kernel/generic/include/ddi/ddi.h	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/include/ddi/ddi.h	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -63,14 +63,14 @@
 extern void pio_unmap(void *, void *, size_t);
 
-extern sys_errno_t sys_physmem_map(uintptr_t, size_t, unsigned int, void *,
+extern sys_errno_t sys_physmem_map(uintptr_t, size_t, unsigned int, uspace_ptr(void),
     uintptr_t);
 extern sys_errno_t sys_physmem_unmap(uintptr_t);
 
-extern sys_errno_t sys_dmamem_map(size_t, unsigned int, unsigned int, void *,
-    void *, uintptr_t);
+extern sys_errno_t sys_dmamem_map(size_t, unsigned int, unsigned int, uspace_ptr(void),
+    uspace_ptr(void), uintptr_t);
 extern sys_errno_t sys_dmamem_unmap(uintptr_t, size_t, unsigned int);
 
-extern sys_errno_t sys_iospace_enable(ddi_ioarg_t *);
-extern sys_errno_t sys_iospace_disable(ddi_ioarg_t *);
+extern sys_errno_t sys_iospace_enable(uspace_ptr(ddi_ioarg_t));
+extern sys_errno_t sys_iospace_disable(uspace_ptr(ddi_ioarg_t));
 
 /*
Index: kernel/generic/include/ipc/irq.h
===================================================================
--- kernel/generic/include/ipc/irq.h	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/include/ipc/irq.h	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -50,6 +50,6 @@
 extern void ipc_irq_top_half_handler(irq_t *);
 
-extern errno_t ipc_irq_subscribe(answerbox_t *, inr_t, sysarg_t, irq_code_t *,
-    cap_irq_handle_t *);
+extern errno_t ipc_irq_subscribe(answerbox_t *, inr_t, sysarg_t, uspace_ptr(irq_code_t),
+    uspace_ptr(cap_irq_handle_t));
 extern errno_t ipc_irq_unsubscribe(answerbox_t *, cap_irq_handle_t);
 
Index: kernel/generic/include/ipc/sysipc.h
===================================================================
--- kernel/generic/include/ipc/sysipc.h	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/include/ipc/sysipc.h	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -44,22 +44,22 @@
 extern sys_errno_t sys_ipc_call_async_fast(cap_phone_handle_t, sysarg_t,
     sysarg_t, sysarg_t, sysarg_t, sysarg_t);
-extern sys_errno_t sys_ipc_call_async_slow(cap_phone_handle_t, ipc_data_t *,
+extern sys_errno_t sys_ipc_call_async_slow(cap_phone_handle_t, uspace_ptr(ipc_data_t),
     sysarg_t);
 extern sys_errno_t sys_ipc_answer_fast(cap_call_handle_t, sysarg_t, sysarg_t,
     sysarg_t, sysarg_t, sysarg_t);
-extern sys_errno_t sys_ipc_answer_slow(cap_call_handle_t, ipc_data_t *);
-extern sys_errno_t sys_ipc_wait_for_call(ipc_data_t *, uint32_t, unsigned int);
+extern sys_errno_t sys_ipc_answer_slow(cap_call_handle_t, uspace_ptr(ipc_data_t));
+extern sys_errno_t sys_ipc_wait_for_call(uspace_ptr(ipc_data_t), uint32_t, unsigned int);
 extern sys_errno_t sys_ipc_poke(void);
 extern sys_errno_t sys_ipc_forward_fast(cap_call_handle_t, cap_phone_handle_t,
     sysarg_t, sysarg_t, sysarg_t, unsigned int);
 extern sys_errno_t sys_ipc_forward_slow(cap_call_handle_t, cap_phone_handle_t,
-    ipc_data_t *, unsigned int);
+    uspace_ptr(ipc_data_t), unsigned int);
 extern sys_errno_t sys_ipc_hangup(cap_phone_handle_t);
 
-extern sys_errno_t sys_ipc_irq_subscribe(inr_t, sysarg_t, irq_code_t *,
-    cap_irq_handle_t *);
+extern sys_errno_t sys_ipc_irq_subscribe(inr_t, sysarg_t, uspace_ptr(irq_code_t),
+    uspace_ptr(cap_irq_handle_t));
 extern sys_errno_t sys_ipc_irq_unsubscribe(cap_irq_handle_t);
 
-extern sys_errno_t sys_ipc_connect_kbox(task_id_t *, cap_phone_handle_t *);
+extern sys_errno_t sys_ipc_connect_kbox(uspace_ptr(task_id_t), uspace_ptr(cap_phone_handle_t));
 
 #endif
Index: kernel/generic/include/log.h
===================================================================
--- kernel/generic/include/log.h	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/include/log.h	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -52,6 +52,6 @@
     _HELENOS_PRINTF_ATTRIBUTE(3, 4);
 
-extern sys_errno_t sys_klog(sysarg_t, void *buf, size_t size,
-    sysarg_t level, size_t *uspace_nread);
+extern sys_errno_t sys_klog(sysarg_t, uspace_ptr(void) buf, size_t size,
+    sysarg_t level, uspace_ptr(size_t) uspace_nread);
 
 #endif /* KERN_LOG_H_ */
Index: kernel/generic/include/mm/as.h
===================================================================
--- kernel/generic/include/mm/as.h	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/include/mm/as.h	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -373,8 +373,8 @@
 /* Address space area related syscalls. */
 extern sysarg_t sys_as_area_create(uintptr_t, size_t, unsigned int, uintptr_t,
-    as_area_pager_info_t *);
+    uspace_ptr(as_area_pager_info_t));
 extern sys_errno_t sys_as_area_resize(uintptr_t, size_t, unsigned int);
 extern sys_errno_t sys_as_area_change_flags(uintptr_t, unsigned int);
-extern sys_errno_t sys_as_area_get_info(uintptr_t, as_area_info_t *);
+extern sys_errno_t sys_as_area_get_info(uintptr_t, uspace_ptr(as_area_info_t));
 extern sys_errno_t sys_as_area_destroy(uintptr_t);
 
Index: kernel/generic/include/mm/page.h
===================================================================
--- kernel/generic/include/mm/page.h	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/include/mm/page.h	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -68,5 +68,5 @@
 
 extern errno_t page_find_mapping(uintptr_t, uintptr_t *);
-extern sys_errno_t sys_page_find_mapping(uintptr_t, uintptr_t *);
+extern sys_errno_t sys_page_find_mapping(uintptr_t, uspace_ptr(uintptr_t));
 
 #endif
Index: kernel/generic/include/proc/program.h
===================================================================
--- kernel/generic/include/proc/program.h	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/include/proc/program.h	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -55,10 +55,10 @@
 extern void *program_loader;
 
-extern errno_t program_create(as_t *, uintptr_t, char *, program_t *);
+extern errno_t program_create(as_t *, uspace_addr_t, char *, program_t *);
 extern errno_t program_create_from_image(void *, char *, program_t *);
 extern errno_t program_create_loader(program_t *, char *);
 extern void program_ready(program_t *);
 
-extern sys_errno_t sys_program_spawn_loader(char *, size_t);
+extern sys_errno_t sys_program_spawn_loader(uspace_ptr(char), size_t);
 
 #endif
Index: kernel/generic/include/proc/task.h
===================================================================
--- kernel/generic/include/proc/task.h	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/include/proc/task.h	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -164,5 +164,5 @@
 
 #ifdef __32_BITS__
-extern sys_errno_t sys_task_get_id(sysarg64_t *);
+extern sys_errno_t sys_task_get_id(uspace_ptr(sysarg64_t));
 #endif
 
@@ -171,6 +171,6 @@
 #endif
 
-extern sys_errno_t sys_task_set_name(const char *, size_t);
-extern sys_errno_t sys_task_kill(task_id_t *);
+extern sys_errno_t sys_task_set_name(uspace_ptr(const char), size_t);
+extern sys_errno_t sys_task_kill(uspace_ptr(task_id_t));
 extern sys_errno_t sys_task_exit(sysarg_t);
 
Index: kernel/generic/include/proc/thread.h
===================================================================
--- kernel/generic/include/proc/thread.h	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/include/proc/thread.h	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -265,8 +265,8 @@
 
 /* Thread syscall prototypes. */
-extern sys_errno_t sys_thread_create(uspace_arg_t *, char *, size_t,
-    thread_id_t *);
+extern sys_errno_t sys_thread_create(uspace_ptr(uspace_arg_t), uspace_ptr(char), size_t,
+    uspace_ptr(thread_id_t));
 extern sys_errno_t sys_thread_exit(int);
-extern sys_errno_t sys_thread_get_id(thread_id_t *);
+extern sys_errno_t sys_thread_get_id(uspace_ptr(thread_id_t));
 extern sys_errno_t sys_thread_usleep(uint32_t);
 extern sys_errno_t sys_thread_udelay(uint32_t);
Index: kernel/generic/include/security/perm.h
===================================================================
--- kernel/generic/include/security/perm.h	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/include/security/perm.h	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -75,6 +75,6 @@
 #ifdef __32_BITS__
 
-extern sys_errno_t sys_perm_grant(sysarg64_t *, perm_t);
-extern sys_errno_t sys_perm_revoke(sysarg64_t *, perm_t);
+extern sys_errno_t sys_perm_grant(uspace_ptr(sysarg64_t), perm_t);
+extern sys_errno_t sys_perm_revoke(uspace_ptr(sysarg64_t), perm_t);
 
 #endif  /* __32_BITS__ */
Index: kernel/generic/include/synch/syswaitq.h
===================================================================
--- kernel/generic/include/synch/syswaitq.h	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/include/synch/syswaitq.h	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -43,5 +43,5 @@
 extern void sys_waitq_task_cleanup(void);
 
-extern sys_errno_t sys_waitq_create(cap_waitq_handle_t *);
+extern sys_errno_t sys_waitq_create(uspace_ptr(cap_waitq_handle_t));
 extern sys_errno_t sys_waitq_sleep(cap_waitq_handle_t, uint32_t, unsigned int);
 extern sys_errno_t sys_waitq_wakeup(cap_waitq_handle_t);
Index: kernel/generic/include/syscall/copy.h
===================================================================
--- kernel/generic/include/syscall/copy.h	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/include/syscall/copy.h	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -44,6 +44,6 @@
 extern char memcpy_to_uspace_failover_address;
 
-extern errno_t copy_from_uspace(void *dst, const void *uspace_src, size_t size);
-extern errno_t copy_to_uspace(void *dst_uspace, const void *src, size_t size);
+extern errno_t copy_from_uspace(void *dst, uspace_addr_t uspace_src, size_t size);
+extern errno_t copy_to_uspace(uspace_addr_t dst_uspace, const void *src, size_t size);
 
 /*
@@ -51,6 +51,6 @@
  * The functions return zero on failure and nonzero on success.
  */
-extern uintptr_t memcpy_from_uspace(void *dst, const void *uspace_src, size_t size);
-extern uintptr_t memcpy_to_uspace(void *uspace_dst, const void *src, size_t size);
+extern uintptr_t memcpy_from_uspace(void *dst, uspace_addr_t uspace_src, size_t size);
+extern uintptr_t memcpy_to_uspace(uspace_addr_t uspace_dst, const void *src, size_t size);
 
 #endif
Index: kernel/generic/include/sysinfo/sysinfo.h
===================================================================
--- kernel/generic/include/sysinfo/sysinfo.h	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/include/sysinfo/sysinfo.h	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -162,10 +162,10 @@
 extern void sysinfo_dump(sysinfo_item_t *);
 
-extern sys_errno_t sys_sysinfo_get_keys_size(void *, size_t, void *);
-extern sys_errno_t sys_sysinfo_get_keys(void *, size_t, void *, size_t, size_t *);
-extern sysarg_t sys_sysinfo_get_val_type(void *, size_t);
-extern sys_errno_t sys_sysinfo_get_value(void *, size_t, void *);
-extern sys_errno_t sys_sysinfo_get_data_size(void *, size_t, void *);
-extern sys_errno_t sys_sysinfo_get_data(void *, size_t, void *, size_t, size_t *);
+extern sys_errno_t sys_sysinfo_get_keys_size(uspace_ptr(void), size_t, uspace_ptr(void));
+extern sys_errno_t sys_sysinfo_get_keys(uspace_ptr(void), size_t, uspace_ptr(void), size_t, uspace_ptr(size_t));
+extern sysarg_t sys_sysinfo_get_val_type(uspace_ptr(void), size_t);
+extern sys_errno_t sys_sysinfo_get_value(uspace_ptr(void), size_t, uspace_ptr(void));
+extern sys_errno_t sys_sysinfo_get_data_size(uspace_ptr(void), size_t, uspace_ptr(void));
+extern sys_errno_t sys_sysinfo_get_data(uspace_ptr(void), size_t, uspace_ptr(void), size_t, uspace_ptr(size_t));
 
 #endif
Index: kernel/generic/include/udebug/udebug_ops.h
===================================================================
--- kernel/generic/include/udebug/udebug_ops.h	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/include/udebug/udebug_ops.h	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -55,5 +55,5 @@
 errno_t udebug_regs_read(thread_t *t, void **buffer);
 
-errno_t udebug_mem_read(sysarg_t uspace_addr, size_t n, void **buffer);
+errno_t udebug_mem_read(uspace_ptr(void) uspace_addr, size_t n, void **buffer);
 
 #endif
Index: kernel/generic/src/console/console.c
===================================================================
--- kernel/generic/src/console/console.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/src/console/console.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -395,5 +395,5 @@
  *
  */
-sys_errno_t sys_kio(int cmd, const void *buf, size_t size)
+sys_errno_t sys_kio(int cmd, uspace_ptr(void) buf, size_t size)
 {
 	char *data;
Index: kernel/generic/src/ddi/ddi.c
===================================================================
--- kernel/generic/src/ddi/ddi.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/src/ddi/ddi.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -248,5 +248,5 @@
  */
 sys_errno_t sys_physmem_map(uintptr_t phys, size_t pages, unsigned int flags,
-    void *virt_ptr, uintptr_t bound)
+    uspace_ptr(void) virt_ptr, uintptr_t bound)
 {
 	uintptr_t virt;
@@ -262,5 +262,5 @@
 	rc = copy_to_uspace(virt_ptr, &virt, sizeof(virt));
 	if (rc != EOK) {
-		physmem_unmap((uintptr_t) virt);
+		physmem_unmap(virt);
 		return rc;
 	}
@@ -393,5 +393,5 @@
  *
  */
-sys_errno_t sys_iospace_enable(ddi_ioarg_t *uspace_io_arg)
+sys_errno_t sys_iospace_enable(uspace_ptr(ddi_ioarg_t) uspace_io_arg)
 {
 	ddi_ioarg_t arg;
@@ -404,5 +404,5 @@
 }
 
-sys_errno_t sys_iospace_disable(ddi_ioarg_t *uspace_io_arg)
+sys_errno_t sys_iospace_disable(uspace_ptr(ddi_ioarg_t) uspace_io_arg)
 {
 	ddi_ioarg_t arg;
@@ -465,5 +465,5 @@
 
 sys_errno_t sys_dmamem_map(size_t size, unsigned int map_flags, unsigned int flags,
-    void *phys_ptr, void *virt_ptr, uintptr_t bound)
+    uspace_ptr(void) phys_ptr, uspace_ptr(void) virt_ptr, uintptr_t bound)
 {
 	if ((flags & DMAMEM_FLAGS_ANONYMOUS) == 0) {
@@ -473,5 +473,5 @@
 
 		uintptr_t phys;
-		errno_t rc = dmamem_map((uintptr_t) virt_ptr, size, map_flags,
+		errno_t rc = dmamem_map(virt_ptr, size, map_flags,
 		    flags, &phys);
 
@@ -481,5 +481,5 @@
 		rc = copy_to_uspace(phys_ptr, &phys, sizeof(phys));
 		if (rc != EOK) {
-			dmamem_unmap((uintptr_t) virt_ptr, size);
+			dmamem_unmap(virt_ptr, size);
 			return rc;
 		}
@@ -508,5 +508,5 @@
 		rc = copy_to_uspace(phys_ptr, &phys, sizeof(phys));
 		if (rc != EOK) {
-			dmamem_unmap_anonymous((uintptr_t) virt);
+			dmamem_unmap_anonymous(virt);
 			return rc;
 		}
@@ -514,5 +514,5 @@
 		rc = copy_to_uspace(virt_ptr, &virt, sizeof(virt));
 		if (rc != EOK) {
-			dmamem_unmap_anonymous((uintptr_t) virt);
+			dmamem_unmap_anonymous(virt);
 			return rc;
 		}
Index: kernel/generic/src/ipc/irq.c
===================================================================
--- kernel/generic/src/ipc/irq.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/src/ipc/irq.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -223,5 +223,5 @@
  *
  */
-static irq_code_t *code_from_uspace(irq_code_t *ucode)
+static irq_code_t *code_from_uspace(uspace_ptr(irq_code_t) ucode)
 {
 	irq_pio_range_t *ranges = NULL;
@@ -242,5 +242,5 @@
 	if (!ranges)
 		goto error;
-	rc = copy_from_uspace(ranges, code->ranges,
+	rc = copy_from_uspace(ranges, (uintptr_t) code->ranges,
 	    sizeof(code->ranges[0]) * code->rangecount);
 	if (rc != EOK)
@@ -250,5 +250,5 @@
 	if (!cmds)
 		goto error;
-	rc = copy_from_uspace(cmds, code->cmds,
+	rc = copy_from_uspace(cmds, (uintptr_t) code->cmds,
 	    sizeof(code->cmds[0]) * code->cmdcount);
 	if (rc != EOK)
@@ -323,5 +323,5 @@
  */
 errno_t ipc_irq_subscribe(answerbox_t *box, inr_t inr, sysarg_t imethod,
-    irq_code_t *ucode, cap_irq_handle_t *uspace_handle)
+    uspace_ptr(irq_code_t) ucode, uspace_ptr(cap_irq_handle_t) uspace_handle)
 {
 	if ((inr < 0) || (inr > last_inr))
Index: kernel/generic/src/ipc/ops/dataread.c
===================================================================
--- kernel/generic/src/ipc/ops/dataread.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/src/ipc/ops/dataread.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -63,6 +63,6 @@
 	if (!ipc_get_retval(&answer->data)) {
 		/* The recipient agreed to send data. */
-		uintptr_t src = ipc_get_arg1(&answer->data);
-		uintptr_t dst = ipc_get_arg1(olddata);
+		uspace_addr_t src = ipc_get_arg1(&answer->data);
+		uspace_addr_t dst = ipc_get_arg1(olddata);
 		size_t max_size = ipc_get_arg2(olddata);
 		size_t size = ipc_get_arg2(&answer->data);
@@ -81,5 +81,5 @@
 			}
 			errno_t rc = copy_from_uspace(answer->buffer,
-			    (void *) src, size);
+			    src, size);
 			if (rc) {
 				ipc_set_retval(&answer->data, rc);
@@ -103,9 +103,9 @@
 {
 	if (answer->buffer) {
-		uintptr_t dst = ipc_get_arg1(&answer->data);
+		uspace_addr_t dst = ipc_get_arg1(&answer->data);
 		size_t size = ipc_get_arg2(&answer->data);
 		errno_t rc;
 
-		rc = copy_to_uspace((void *) dst, answer->buffer, size);
+		rc = copy_to_uspace(dst, answer->buffer, size);
 		if (rc)
 			ipc_set_retval(&answer->data, rc);
Index: kernel/generic/src/ipc/ops/datawrite.c
===================================================================
--- kernel/generic/src/ipc/ops/datawrite.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/src/ipc/ops/datawrite.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -43,5 +43,5 @@
 static errno_t request_preprocess(call_t *call, phone_t *phone)
 {
-	uintptr_t src = ipc_get_arg1(&call->data);
+	uspace_addr_t src = ipc_get_arg1(&call->data);
 	size_t size = ipc_get_arg2(&call->data);
 
@@ -59,5 +59,5 @@
 	if (!call->buffer)
 		return ENOMEM;
-	errno_t rc = copy_from_uspace(call->buffer, (void *) src, size);
+	errno_t rc = copy_from_uspace(call->buffer, src, size);
 	if (rc != EOK) {
 		/*
@@ -77,10 +77,10 @@
 	if (!ipc_get_retval(&answer->data)) {
 		/* The recipient agreed to receive data. */
-		uintptr_t dst = (uintptr_t)ipc_get_arg1(&answer->data);
-		size_t size = (size_t)ipc_get_arg2(&answer->data);
-		size_t max_size = (size_t)ipc_get_arg2(olddata);
+		uspace_addr_t dst = ipc_get_arg1(&answer->data);
+		size_t size = ipc_get_arg2(&answer->data);
+		size_t max_size = ipc_get_arg2(olddata);
 
 		if (size <= max_size) {
-			errno_t rc = copy_to_uspace((void *) dst,
+			errno_t rc = copy_to_uspace(dst,
 			    answer->buffer, size);
 			if (rc)
Index: kernel/generic/src/ipc/ops/debug.c
===================================================================
--- kernel/generic/src/ipc/ops/debug.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/src/ipc/ops/debug.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -47,9 +47,9 @@
 {
 	if (answer->buffer) {
-		uintptr_t dst = ipc_get_arg1(&answer->data);
+		uspace_addr_t dst = ipc_get_arg1(&answer->data);
 		size_t size = ipc_get_arg2(&answer->data);
 		errno_t rc;
 
-		rc = copy_to_uspace((void *) dst, answer->buffer, size);
+		rc = copy_to_uspace(dst, answer->buffer, size);
 		if (rc)
 			ipc_set_retval(&answer->data, rc);
Index: kernel/generic/src/ipc/ops/shareout.c
===================================================================
--- kernel/generic/src/ipc/ops/shareout.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/src/ipc/ops/shareout.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -70,5 +70,5 @@
 
 		if (rc == EOK) {
-			rc = copy_to_uspace((void *) ipc_get_arg2(&answer->data),
+			rc = copy_to_uspace(ipc_get_arg2(&answer->data),
 			    &dst_base, sizeof(dst_base));
 		}
Index: kernel/generic/src/ipc/sysipc.c
===================================================================
--- kernel/generic/src/ipc/sysipc.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/src/ipc/sysipc.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -419,5 +419,5 @@
  *
  */
-sys_errno_t sys_ipc_call_async_slow(cap_phone_handle_t handle, ipc_data_t *data,
+sys_errno_t sys_ipc_call_async_slow(cap_phone_handle_t handle, uspace_ptr(ipc_data_t) data,
     sysarg_t label)
 {
@@ -437,5 +437,5 @@
 	}
 
-	errno_t rc = copy_from_uspace(&call->data.args, &data->args,
+	errno_t rc = copy_from_uspace(&call->data.args, data + offsetof(ipc_data_t, args),
 	    sizeof(call->data.args));
 	if (rc != EOK) {
@@ -623,8 +623,8 @@
  */
 sys_errno_t sys_ipc_forward_slow(cap_call_handle_t chandle,
-    cap_phone_handle_t phandle, ipc_data_t *data, unsigned int mode)
+    cap_phone_handle_t phandle, uspace_ptr(ipc_data_t) data, unsigned int mode)
 {
 	ipc_data_t newdata;
-	errno_t rc = copy_from_uspace(&newdata.args, &data->args,
+	errno_t rc = copy_from_uspace(&newdata.args, data + offsetof(ipc_data_t, args),
 	    sizeof(newdata.args));
 	if (rc != EOK)
@@ -700,5 +700,5 @@
  *
  */
-sys_errno_t sys_ipc_answer_slow(cap_call_handle_t chandle, ipc_data_t *data)
+sys_errno_t sys_ipc_answer_slow(cap_call_handle_t chandle, uspace_ptr(ipc_data_t) data)
 {
 	kobject_t *kobj = cap_unpublish(TASK, chandle, KOBJECT_TYPE_CALL);
@@ -718,5 +718,5 @@
 		saved = false;
 
-	errno_t rc = copy_from_uspace(&call->data.args, &data->args,
+	errno_t rc = copy_from_uspace(&call->data.args, data + offsetof(ipc_data_t, args),
 	    sizeof(call->data.args));
 	if (rc != EOK) {
@@ -766,5 +766,5 @@
  * @return An error code on error.
  */
-sys_errno_t sys_ipc_wait_for_call(ipc_data_t *calldata, uint32_t usec,
+sys_errno_t sys_ipc_wait_for_call(uspace_ptr(ipc_data_t) calldata, uint32_t usec,
     unsigned int flags)
 {
@@ -888,5 +888,5 @@
  */
 sys_errno_t sys_ipc_irq_subscribe(inr_t inr, sysarg_t imethod,
-    irq_code_t *ucode, cap_irq_handle_t *uspace_handle)
+    uspace_ptr(irq_code_t) ucode, uspace_ptr(cap_irq_handle_t) uspace_handle)
 {
 	if (!(perm_get(TASK) & PERM_IRQ_REG))
@@ -918,6 +918,6 @@
  *
  */
-sys_errno_t sys_ipc_connect_kbox(task_id_t *uspace_taskid,
-    cap_phone_handle_t *uspace_phone)
+sys_errno_t sys_ipc_connect_kbox(uspace_ptr(task_id_t) uspace_taskid,
+    uspace_ptr(cap_phone_handle_t) uspace_phone)
 {
 #ifdef CONFIG_UDEBUG
Index: kernel/generic/src/log/log.c
===================================================================
--- kernel/generic/src/log/log.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/src/log/log.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -295,6 +295,6 @@
  *
  */
-sys_errno_t sys_klog(sysarg_t operation, void *buf, size_t size,
-    sysarg_t level, size_t *uspace_nread)
+sys_errno_t sys_klog(sysarg_t operation, uspace_ptr(void) buf, size_t size,
+    sysarg_t level, uspace_ptr(size_t) uspace_nread)
 {
 	char *data;
Index: kernel/generic/src/main/uinit.c
===================================================================
--- kernel/generic/src/main/uinit.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/src/main/uinit.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -70,5 +70,5 @@
 #endif
 
-	uspace_arg_t *uarg = (uspace_arg_t *) arg;
+	uspace_arg_t *uarg = arg;
 	uspace_arg_t local_uarg;
 
@@ -77,6 +77,6 @@
 	local_uarg.uspace_stack_size = uarg->uspace_stack_size;
 	local_uarg.uspace_uarg = uarg->uspace_uarg;
-	local_uarg.uspace_thread_function = NULL;
-	local_uarg.uspace_thread_arg = NULL;
+	local_uarg.uspace_thread_function = USPACE_NULL;
+	local_uarg.uspace_thread_arg = USPACE_NULL;
 
 	free(uarg);
Index: kernel/generic/src/mm/as.c
===================================================================
--- kernel/generic/src/mm/as.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/src/mm/as.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -2092,5 +2092,5 @@
 
 sysarg_t sys_as_area_create(uintptr_t base, size_t size, unsigned int flags,
-    uintptr_t bound, as_area_pager_info_t *pager_info)
+    uintptr_t bound, uspace_ptr(as_area_pager_info_t) pager_info)
 {
 	uintptr_t virt = base;
@@ -2098,5 +2098,5 @@
 	mem_backend_data_t backend_data;
 
-	if (pager_info == AS_AREA_UNPAGED)
+	if (!pager_info)
 		backend = &anon_backend;
 	else {
@@ -2125,5 +2125,5 @@
 }
 
-sys_errno_t sys_as_area_get_info(uintptr_t address, as_area_info_t *dest)
+sys_errno_t sys_as_area_get_info(uintptr_t address, uspace_ptr(as_area_info_t) dest)
 {
 	as_area_t *area;
@@ -2136,10 +2136,14 @@
 	}
 
-	dest->start_addr = area->base;
-	dest->size = P2SZ(area->pages);
-	dest->flags = area->flags;
+	as_area_info_t info = {
+		.start_addr = area->base,
+		.size = P2SZ(area->pages),
+		.flags = area->flags,
+	};
 
 	mutex_unlock(&area->lock);
 	mutex_unlock(&AS->lock);
+
+	copy_to_uspace(dest, &info, sizeof(info));
 	return EOK;
 }
Index: kernel/generic/src/mm/page.c
===================================================================
--- kernel/generic/src/mm/page.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/src/mm/page.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -215,5 +215,5 @@
  *
  */
-sys_errno_t sys_page_find_mapping(uintptr_t virt, uintptr_t *phys_ptr)
+sys_errno_t sys_page_find_mapping(uintptr_t virt, uspace_ptr(uintptr_t) phys_ptr)
 {
 	uintptr_t phys;
Index: kernel/generic/src/proc/program.c
===================================================================
--- kernel/generic/src/proc/program.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/src/proc/program.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -69,5 +69,5 @@
  *
  */
-errno_t program_create(as_t *as, uintptr_t entry_addr, char *name, program_t *prg)
+errno_t program_create(as_t *as, uspace_addr_t entry_addr, char *name, program_t *prg)
 {
 	uspace_arg_t *kernel_uarg = (uspace_arg_t *)
@@ -86,5 +86,5 @@
 	 * Create the stack address space area.
 	 */
-	uintptr_t virt = (uintptr_t) -1;
+	uintptr_t virt = (uintptr_t) AS_AREA_ANY;
 	uintptr_t bound = USER_ADDRESS_SPACE_END - (STACK_SIZE_USER - 1);
 
@@ -103,10 +103,10 @@
 	}
 
-	kernel_uarg->uspace_entry = (void *) entry_addr;
-	kernel_uarg->uspace_stack = (void *) virt;
+	kernel_uarg->uspace_entry = entry_addr;
+	kernel_uarg->uspace_stack = virt;
 	kernel_uarg->uspace_stack_size = STACK_SIZE_USER;
-	kernel_uarg->uspace_thread_function = NULL;
-	kernel_uarg->uspace_thread_arg = NULL;
-	kernel_uarg->uspace_uarg = NULL;
+	kernel_uarg->uspace_thread_function = USPACE_NULL;
+	kernel_uarg->uspace_thread_arg = USPACE_NULL;
+	kernel_uarg->uspace_uarg = USPACE_NULL;
 
 	/*
@@ -218,5 +218,5 @@
  *
  */
-sys_errno_t sys_program_spawn_loader(char *uspace_name, size_t name_len)
+sys_errno_t sys_program_spawn_loader(uspace_ptr(char) uspace_name, size_t name_len)
 {
 	/* Cap length of name and copy it from userspace. */
Index: kernel/generic/src/proc/task.c
===================================================================
--- kernel/generic/src/proc/task.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/src/proc/task.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -323,5 +323,5 @@
  *
  */
-sys_errno_t sys_task_get_id(sysarg64_t *uspace_taskid)
+sys_errno_t sys_task_get_id(uspace_ptr(sysarg64_t) uspace_taskid)
 {
 	/*
@@ -363,5 +363,5 @@
  *
  */
-sys_errno_t sys_task_set_name(const char *uspace_name, size_t name_len)
+sys_errno_t sys_task_set_name(const uspace_ptr(char) uspace_name, size_t name_len)
 {
 	char namebuf[TASK_NAME_BUFLEN];
@@ -404,5 +404,5 @@
  *
  */
-sys_errno_t sys_task_kill(task_id_t *uspace_taskid)
+sys_errno_t sys_task_kill(uspace_ptr(task_id_t) uspace_taskid)
 {
 	task_id_t taskid;
Index: kernel/generic/src/proc/thread.c
===================================================================
--- kernel/generic/src/proc/thread.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/src/proc/thread.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -998,6 +998,6 @@
  *
  */
-sys_errno_t sys_thread_create(uspace_arg_t *uspace_uarg, char *uspace_name,
-    size_t name_len, thread_id_t *uspace_thread_id)
+sys_errno_t sys_thread_create(uspace_ptr(uspace_arg_t) uspace_uarg, uspace_ptr(char) uspace_name,
+    size_t name_len, uspace_ptr(thread_id_t) uspace_thread_id)
 {
 	if (name_len > THREAD_NAME_BUFLEN - 1)
@@ -1029,5 +1029,5 @@
 	    THREAD_FLAG_USPACE | THREAD_FLAG_NOATTACH, namebuf);
 	if (thread) {
-		if (uspace_thread_id != NULL) {
+		if (uspace_thread_id) {
 			rc = copy_to_uspace(uspace_thread_id, &thread->tid,
 			    sizeof(thread->tid));
@@ -1088,5 +1088,5 @@
  *
  */
-sys_errno_t sys_thread_get_id(thread_id_t *uspace_thread_id)
+sys_errno_t sys_thread_get_id(uspace_ptr(thread_id_t) uspace_thread_id)
 {
 	/*
Index: kernel/generic/src/security/perm.c
===================================================================
--- kernel/generic/src/security/perm.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/src/security/perm.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -158,5 +158,5 @@
  *
  */
-sys_errno_t sys_perm_grant(sysarg64_t *uspace_taskid, perm_t perms)
+sys_errno_t sys_perm_grant(uspace_ptr(sysarg64_t) uspace_taskid, perm_t perms)
 {
 	sysarg64_t taskid;
@@ -179,5 +179,5 @@
  *
  */
-sys_errno_t sys_perm_revoke(sysarg64_t *uspace_taskid, perm_t perms)
+sys_errno_t sys_perm_revoke(uspace_ptr(sysarg64_t) uspace_taskid, perm_t perms)
 {
 	sysarg64_t taskid;
Index: kernel/generic/src/synch/syswaitq.c
===================================================================
--- kernel/generic/src/synch/syswaitq.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/src/synch/syswaitq.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -88,5 +88,5 @@
  * @return              Error code.
  */
-sys_errno_t sys_waitq_create(cap_waitq_handle_t *whandle)
+sys_errno_t sys_waitq_create(uspace_ptr(cap_waitq_handle_t) whandle)
 {
 	waitq_t *wq = slab_alloc(waitq_cache, FRAME_ATOMIC);
Index: kernel/generic/src/syscall/copy.c
===================================================================
--- kernel/generic/src/syscall/copy.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/src/syscall/copy.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -59,5 +59,5 @@
  * @return EOK on success or an error code from @ref errno.h.
  */
-errno_t copy_from_uspace(void *dst, const void *uspace_src, size_t size)
+errno_t copy_from_uspace(void *dst, uspace_addr_t uspace_src, size_t size)
 {
 	ipl_t ipl;
@@ -68,5 +68,5 @@
 
 	if (!KERNEL_ADDRESS_SPACE_SHADOWED) {
-		if (overlaps((uintptr_t) uspace_src, size,
+		if (overlaps(uspace_src, size,
 		    KERNEL_ADDRESS_SPACE_START,
 		    KERNEL_ADDRESS_SPACE_END - KERNEL_ADDRESS_SPACE_START)) {
@@ -82,5 +82,5 @@
 	 * Check whether the address is outside the address space hole.
 	 */
-	if (overlaps((uintptr_t) uspace_src, size, ADDRESS_SPACE_HOLE_START,
+	if (overlaps(uspace_src, size, ADDRESS_SPACE_HOLE_START,
 	    ADDRESS_SPACE_HOLE_END - ADDRESS_SPACE_HOLE_START))
 		return EPERM;
@@ -110,5 +110,5 @@
  * @return 0 on success or an error code from @ref errno.h.
  */
-errno_t copy_to_uspace(void *uspace_dst, const void *src, size_t size)
+errno_t copy_to_uspace(uspace_addr_t uspace_dst, const void *src, size_t size)
 {
 	ipl_t ipl;
@@ -119,5 +119,5 @@
 
 	if (!KERNEL_ADDRESS_SPACE_SHADOWED) {
-		if (overlaps((uintptr_t) uspace_dst, size,
+		if (overlaps(uspace_dst, size,
 		    KERNEL_ADDRESS_SPACE_START,
 		    KERNEL_ADDRESS_SPACE_END - KERNEL_ADDRESS_SPACE_START)) {
@@ -133,5 +133,5 @@
 	 * Check whether the address is outside the address space hole.
 	 */
-	if (overlaps((uintptr_t) uspace_dst, size, ADDRESS_SPACE_HOLE_START,
+	if (overlaps(uspace_dst, size, ADDRESS_SPACE_HOLE_START,
 	    ADDRESS_SPACE_HOLE_END - ADDRESS_SPACE_HOLE_START))
 		return EPERM;
Index: kernel/generic/src/sysinfo/sysinfo.c
===================================================================
--- kernel/generic/src/sysinfo/sysinfo.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/src/sysinfo/sysinfo.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -677,5 +677,5 @@
  *
  */
-_NO_TRACE static sysinfo_return_t sysinfo_get_item_uspace(void *ptr, size_t size,
+_NO_TRACE static sysinfo_return_t sysinfo_get_item_uspace(uspace_ptr(void) ptr, size_t size,
     bool dry_run)
 {
@@ -786,5 +786,5 @@
  *
  */
-_NO_TRACE static sysinfo_return_t sysinfo_get_keys_uspace(void *ptr, size_t size,
+_NO_TRACE static sysinfo_return_t sysinfo_get_keys_uspace(uspace_ptr(void) ptr, size_t size,
     bool dry_run)
 {
@@ -831,6 +831,6 @@
  *
  */
-sys_errno_t sys_sysinfo_get_keys_size(void *path_ptr, size_t path_size,
-    void *size_ptr)
+sys_errno_t sys_sysinfo_get_keys_size(uspace_ptr(void) path_ptr, size_t path_size,
+    uspace_ptr(void) size_ptr)
 {
 	errno_t rc;
@@ -879,6 +879,6 @@
  *
  */
-sys_errno_t sys_sysinfo_get_keys(void *path_ptr, size_t path_size,
-    void *buffer_ptr, size_t buffer_size, size_t *size_ptr)
+sys_errno_t sys_sysinfo_get_keys(uspace_ptr(void) path_ptr, size_t path_size,
+    uspace_ptr(void) buffer_ptr, size_t buffer_size, uspace_ptr(size_t) size_ptr)
 {
 	errno_t rc;
@@ -914,5 +914,5 @@
  *
  */
-sysarg_t sys_sysinfo_get_val_type(void *path_ptr, size_t path_size)
+sysarg_t sys_sysinfo_get_val_type(uspace_ptr(void) path_ptr, size_t path_size)
 {
 	/*
@@ -950,6 +950,6 @@
  *
  */
-sys_errno_t sys_sysinfo_get_value(void *path_ptr, size_t path_size,
-    void *value_ptr)
+sys_errno_t sys_sysinfo_get_value(uspace_ptr(void) path_ptr, size_t path_size,
+    uspace_ptr(void) value_ptr)
 {
 	errno_t rc;
@@ -986,6 +986,6 @@
  *
  */
-sys_errno_t sys_sysinfo_get_data_size(void *path_ptr, size_t path_size,
-    void *size_ptr)
+sys_errno_t sys_sysinfo_get_data_size(uspace_ptr(void) path_ptr, size_t path_size,
+    uspace_ptr(void) size_ptr)
 {
 	errno_t rc;
@@ -1036,6 +1036,6 @@
  *
  */
-sys_errno_t sys_sysinfo_get_data(void *path_ptr, size_t path_size,
-    void *buffer_ptr, size_t buffer_size, size_t *size_ptr)
+sys_errno_t sys_sysinfo_get_data(uspace_ptr(void) path_ptr, size_t path_size,
+    uspace_ptr(void) buffer_ptr, size_t buffer_size, uspace_ptr(size_t) size_ptr)
 {
 	errno_t rc;
Index: kernel/generic/src/udebug/udebug_ipc.c
===================================================================
--- kernel/generic/src/udebug/udebug_ipc.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/src/udebug/udebug_ipc.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -398,6 +398,6 @@
 static void udebug_receive_mem_read(call_t *call)
 {
-	sysarg_t uspace_dst;
-	sysarg_t uspace_src;
+	uspace_ptr(void) uspace_dst;
+	uspace_ptr(void) uspace_src;
 	unsigned size;
 	void *buffer = NULL;
Index: kernel/generic/src/udebug/udebug_ops.c
===================================================================
--- kernel/generic/src/udebug/udebug_ops.c	(revision ef705e14804170a9b507ecf595975f56fa6b0192)
+++ kernel/generic/src/udebug/udebug_ops.c	(revision e39d7b832f24a725f0663acb3b62261da551856a)
@@ -548,5 +548,5 @@
  *
  */
-errno_t udebug_mem_read(sysarg_t uspace_addr, size_t n, void **buffer)
+errno_t udebug_mem_read(uspace_addr_t uspace_addr, size_t n, void **buffer)
 {
 	/* Verify task state */
@@ -569,5 +569,5 @@
 	 *
 	 */
-	errno_t rc = copy_from_uspace(data_buffer, (void *) uspace_addr, n);
+	errno_t rc = copy_from_uspace(data_buffer, uspace_addr, n);
 	mutex_unlock(&TASK->udebug.lock);
 
