Index: kernel/generic/src/main/main.c
===================================================================
--- kernel/generic/src/main/main.c	(revision 29b2bbf5311052c0b1ad8971cfac6843f0ef6a1b)
+++ kernel/generic/src/main/main.c	(revision 61e90ddd605dc4854cbb016a4be65d1cd1e9510c)
@@ -95,4 +95,10 @@
 };
 
+/** Boot allocations. */
+ballocs_t ballocs = {
+	.base = NULL,
+	.size = 0
+};
+
 context_t ctx;
 
@@ -106,5 +112,5 @@
 size_t hardcoded_kdata_size = 0;	/**< Size of the kernel data in bytes. */
 
-uintptr_t stack_safe = 0;	/**< Lowest safe stack virtual address */
+uintptr_t stack_safe = 0;		/**< Lowest safe stack virtual address */
 
 void main_bsp(void);
@@ -152,4 +158,10 @@
 		if (PA_overlaps(config.stack_base, config.stack_size, init.tasks[i].addr, init.tasks[i].size))
 			config.stack_base = ALIGN_UP(init.tasks[i].addr + init.tasks[i].size, config.stack_size);
+	}
+
+	/* Avoid placing stack on top of boot allocations. */
+	if (ballocs.size) {
+		if (PA_overlaps(config.stack_base, config.stack_size, ballocs.base, ballocs.size))
+			config.stack_base = ALIGN_UP(ballocs.base + ballocs.size, PAGE_SIZE);
 	}
 	
Index: kernel/generic/src/mm/frame.c
===================================================================
--- kernel/generic/src/mm/frame.c	(revision 29b2bbf5311052c0b1ad8971cfac6843f0ef6a1b)
+++ kernel/generic/src/mm/frame.c	(revision 61e90ddd605dc4854cbb016a4be65d1cd1e9510c)
@@ -1078,4 +1078,7 @@
 			frame_mark_unavailable(ADDR2PFN(KA2PA(init.tasks[i].addr)), SIZE2FRAMES(init.tasks[i].size));
 
+		if (ballocs.size)
+			frame_mark_unavailable(ADDR2PFN(KA2PA(ballocs.base)), SIZE2FRAMES(ballocs.size));
+
 		/* Black list first frame, as allocating NULL would
 		 * fail in some places */
