Index: kernel/arch/amd64/include/mm/as.h
===================================================================
--- kernel/arch/amd64/include/mm/as.h	(revision dd567c61b9912310795e9518b6a150c5a8158207)
+++ kernel/arch/amd64/include/mm/as.h	(revision 14795627234b341479d2a8da2a14117d97de69cc)
@@ -36,11 +36,14 @@
 #define KERN_amd64_AS_H_
 
+#define ADDRESS_SPACE_HOLE_START	0x0000800000000000ULL
+#define ADDRESS_SPACE_HOLE_END		0xffff7fffffffffffULL
+
 #define KERNEL_ADDRESS_SPACE_SHADOWED_ARCH  0
 
-#define KERNEL_ADDRESS_SPACE_START_ARCH  (unsigned long) 0xffff800000000000
-#define KERNEL_ADDRESS_SPACE_END_ARCH    (unsigned long) 0xffffffffffffffff
+#define KERNEL_ADDRESS_SPACE_START_ARCH	0xffff800000000000ULL
+#define KERNEL_ADDRESS_SPACE_END_ARCH	0xffffffffffffffffULL
 
-#define USER_ADDRESS_SPACE_START_ARCH    (unsigned long) 0x0000000000000000
-#define USER_ADDRESS_SPACE_END_ARCH      (unsigned long) 0x00007fffffffffff
+#define USER_ADDRESS_SPACE_START_ARCH	0x0000000000000000ULL
+#define USER_ADDRESS_SPACE_END_ARCH	0x00007fffffffffffULL
 
 #define USTACK_ADDRESS_ARCH  (USER_ADDRESS_SPACE_END_ARCH - (PAGE_SIZE - 1))
Index: kernel/generic/src/syscall/copy.c
===================================================================
--- kernel/generic/src/syscall/copy.c	(revision dd567c61b9912310795e9518b6a150c5a8158207)
+++ kernel/generic/src/syscall/copy.c	(revision 14795627234b341479d2a8da2a14117d97de69cc)
@@ -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();
