Index: kernel/generic/src/proc/program.c
===================================================================
--- kernel/generic/src/proc/program.c	(revision 3ac5086e0b5b6d93c26f2b1c150344366e5478e8)
+++ kernel/generic/src/proc/program.c	(revision b7acf383016ce70e70a5c0df4f6ed935e25629fe)
@@ -79,8 +79,14 @@
 	 * Create the stack address space area.
 	 */
-	uintptr_t virt = USTACK_ADDRESS;
+	uintptr_t virt = (uintptr_t) -1;
+	uintptr_t bound = USER_ADDRESS_SPACE_END - (STACK_SIZE_USER - 1);
+
+	/* Adjust bound to create space for the desired guard page. */
+	bound -= PAGE_SIZE;
+
 	as_area_t *area = as_area_create(as,
-	    AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE,
-	    STACK_SIZE, AS_AREA_ATTR_NONE, &anon_backend, NULL, &virt, 0);
+	    AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE | AS_AREA_GUARD |
+	    AS_AREA_LATE_RESERVE, STACK_SIZE_USER, AS_AREA_ATTR_NONE,
+	    &anon_backend, NULL, &virt, bound);
 	if (!area) {
 		task_destroy(prg->task);
@@ -93,5 +99,5 @@
 	kernel_uarg->uspace_entry = (void *) entry_addr;
 	kernel_uarg->uspace_stack = (void *) virt;
-	kernel_uarg->uspace_stack_size = STACK_SIZE;
+	kernel_uarg->uspace_stack_size = STACK_SIZE_USER;
 	kernel_uarg->uspace_thread_function = NULL;
 	kernel_uarg->uspace_thread_arg = NULL;
Index: kernel/generic/src/proc/task.c
===================================================================
--- kernel/generic/src/proc/task.c	(revision 3ac5086e0b5b6d93c26f2b1c150344366e5478e8)
+++ kernel/generic/src/proc/task.c	(revision b7acf383016ce70e70a5c0df4f6ed935e25629fe)
@@ -196,5 +196,5 @@
 	task->ucycles = 0;
 	task->kcycles = 0;
-	
+
 	task->ipc_info.call_sent = 0;
 	task->ipc_info.call_received = 0;
