Index: kernel/generic/src/syscall/copy.c
===================================================================
--- kernel/generic/src/syscall/copy.c	(revision 04cb68f2d06da3440e206ec4339c4d23afa3910a)
+++ kernel/generic/src/syscall/copy.c	(revision 4eca0560ec015aab6080f3c3fec0a783f2977837)
@@ -68,5 +68,6 @@
 	if (!KERNEL_ADDRESS_SPACE_SHADOWED) {
 		if (overlaps((uintptr_t) uspace_src, size,
-			KERNEL_ADDRESS_SPACE_START, KERNEL_ADDRESS_SPACE_END-KERNEL_ADDRESS_SPACE_START)) {
+			KERNEL_ADDRESS_SPACE_START,
+			KERNEL_ADDRESS_SPACE_END - KERNEL_ADDRESS_SPACE_START)) {
 			/*
 			 * The userspace source block conflicts with kernel address space.
@@ -75,4 +76,13 @@
 		}
 	}
+
+#ifdef ADDRESS_SPACE_HOLE_START
+	/*
+	 * Check whether the address is outside the address space hole.
+	 */
+	if (overlaps((uintptr_t) uspace_src, size, ADDRESS_SPACE_HOLE_START,
+	    ADDRESS_SPACE_HOLE_END - ADDRESS_SPACE_HOLE_START))
+		return EPERM;
+#endif
 	
 	ipl = interrupts_disable();
@@ -109,5 +119,6 @@
 	if (!KERNEL_ADDRESS_SPACE_SHADOWED) {
 		if (overlaps((uintptr_t) uspace_dst, size,
-			KERNEL_ADDRESS_SPACE_START, KERNEL_ADDRESS_SPACE_END-KERNEL_ADDRESS_SPACE_START)) {
+			KERNEL_ADDRESS_SPACE_START,
+			KERNEL_ADDRESS_SPACE_END - KERNEL_ADDRESS_SPACE_START)) {
 			/*
 			 * The userspace destination block conflicts with kernel address space.
@@ -116,4 +127,13 @@
 		}
 	}
+
+#ifdef ADDRESS_SPACE_HOLE_START
+	/*
+	 * Check whether the address is outside the address space hole.
+	 */
+	if (overlaps((uintptr_t) uspace_dst, size, ADDRESS_SPACE_HOLE_START,
+	    ADDRESS_SPACE_HOLE_END - ADDRESS_SPACE_HOLE_START))
+		return EPERM;
+#endif
 	
 	ipl = interrupts_disable();
