Index: kernel/generic/src/syscall/copy.c
===================================================================
--- kernel/generic/src/syscall/copy.c	(revision b3f8fb771f871e7f2bb35ce9339717639e8f86d6)
+++ kernel/generic/src/syscall/copy.c	(revision f092718bd8d8ba6c92d58209c22e1b6756b222b5)
@@ -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();
