Index: kernel/generic/include/macros.h
===================================================================
--- kernel/generic/include/macros.h	(revision 082b7f1c98926730d2a2ca8eced2348d2d692bc2)
+++ kernel/generic/include/macros.h	(revision 0941e9aef8d4c35315c1613a3fbc4d83335aa988)
@@ -130,4 +130,8 @@
 	    | ((((uint64_t) (up)) & UINT32_C(0xffffffff)) << 32))
 
+/* Test for result wrap-around into positive numbers. */
+#define overflows_add(a, b) \
+	(((a) + (b) < (a)) && ((a) + (b)))
+
 /** Pseudorandom generator
  *
Index: kernel/generic/src/mm/as.c
===================================================================
--- kernel/generic/src/mm/as.c	(revision 082b7f1c98926730d2a2ca8eced2348d2d692bc2)
+++ kernel/generic/src/mm/as.c	(revision 0941e9aef8d4c35315c1613a3fbc4d83335aa988)
@@ -299,4 +299,5 @@
 	ASSERT((addr % PAGE_SIZE) == 0);
 	ASSERT(mutex_locked(&as->lock));
+	ASSERT(!overflows_add(addr, P2SZ(count)));
 	
 	/*
@@ -513,5 +514,5 @@
 	if (size == 0)
 		return NULL;
-	
+
 	size_t pages = SIZE2FRAMES(size);
 	
@@ -531,4 +532,7 @@
 		}
 	}
+
+	if (overflows_add(*base, size))
+		return NULL;
 
 	if (!check_area_conflicts(as, *base, pages, guarded, NULL)) {
@@ -810,4 +814,10 @@
 		/*
 		 * Growing the area.
+		 */
+
+		if (overflows_add(address, P2SZ(pages)))
+			return EINVAL;
+
+		/*
 		 * Check for overlaps with other address space areas.
 		 */
