Index: kernel/generic/include/syscall/copy.h
===================================================================
--- kernel/generic/include/syscall/copy.h	(revision 47e00b8364871fedb5a2508cfc367b91b0cb8e63)
+++ kernel/generic/include/syscall/copy.h	(revision fac0ac7be7d127e6cc5c186e3c497bea39ed2e3b)
@@ -49,7 +49,8 @@
 /*
  * This interface must be implemented by each architecture.
+ * The functions return zero on failure and nonzero on success.
  */
-extern errno_t memcpy_from_uspace(void *dst, const void *uspace_src, size_t size);
-extern errno_t memcpy_to_uspace(void *uspace_dst, const void *src, size_t size);
+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);
 
 #endif
Index: kernel/generic/src/syscall/copy.c
===================================================================
--- kernel/generic/src/syscall/copy.c	(revision 47e00b8364871fedb5a2508cfc367b91b0cb8e63)
+++ kernel/generic/src/syscall/copy.c	(revision fac0ac7be7d127e6cc5c186e3c497bea39ed2e3b)
@@ -90,10 +90,10 @@
 	THREAD->in_copy_from_uspace = true;
 
-	rc = memcpy_from_uspace(dst, uspace_src, size);
+	rc = !memcpy_from_uspace(dst, uspace_src, size) ? EPERM : EOK;
 
 	THREAD->in_copy_from_uspace = false;
 
 	interrupts_restore(ipl);
-	return !rc ? EPERM : EOK;
+	return rc;
 }
 
@@ -141,10 +141,10 @@
 	THREAD->in_copy_to_uspace = true;
 
-	rc = memcpy_to_uspace(uspace_dst, src, size);
+	rc = !memcpy_to_uspace(uspace_dst, src, size) ? EPERM : EOK;
 
 	THREAD->in_copy_to_uspace = false;
 
 	interrupts_restore(ipl);
-	return !rc ? EPERM : 0;
+	return rc;
 }
 
