Index: kernel/generic/src/lib/ra.c
===================================================================
--- kernel/generic/src/lib/ra.c	(revision 91b604993517a2bdc14cfe1ede6902150ab29533)
+++ kernel/generic/src/lib/ra.c	(revision 300f4c4dd43b87fb910ea1cfccdc3280c2bdd2ca)
@@ -196,12 +196,4 @@
 	ra_span_t *span;
 
-	/*
-	 * At the moment, we can only create resources that don't include 0.
-	 * If 0 needs to be considered as a valid resource, we would need to
-	 * slightly change the API of the resource allocator.
-	 */
-	if (base == 0)
-		return false;
-
 	span = ra_span_create(base, size);
 	if (!span)
@@ -215,5 +207,6 @@
 }
 
-static uintptr_t ra_span_alloc(ra_span_t *span, size_t size, size_t align)
+static bool
+ra_span_alloc(ra_span_t *span, size_t size, size_t align, uintptr_t *base)
 {
 	/*
@@ -301,8 +294,9 @@
 		hash_table_insert(&span->used, &key, &seg->fu_link);
 
-		return newbase;
-	}
-
-	return 0;
+		*base = newbase;
+		return true;
+	}
+
+	return false;
 }
 
@@ -382,7 +376,8 @@
 
 /** Allocate resources from arena. */
-uintptr_t ra_alloc(ra_arena_t *arena, size_t size, size_t alignment)
-{
-	uintptr_t base = 0;
+bool
+ra_alloc(ra_arena_t *arena, size_t size, size_t alignment, uintptr_t *base)
+{
+	bool success = false;
 
 	assert(size >= 1);
@@ -392,11 +387,11 @@
 	irq_spinlock_lock(&arena->lock, true);
 	list_foreach(arena->spans, span_link, ra_span_t, span) {
-		base = ra_span_alloc(span, size, alignment);
-		if (base)
+		success = ra_span_alloc(span, size, alignment, base);
+		if (success)
 			break;
 	}
 	irq_spinlock_unlock(&arena->lock, true);
 
-	return base;
+	return success;
 }
 
Index: kernel/generic/src/mm/km.c
===================================================================
--- kernel/generic/src/mm/km.c	(revision 91b604993517a2bdc14cfe1ede6902150ab29533)
+++ kernel/generic/src/mm/km.c	(revision 300f4c4dd43b87fb910ea1cfccdc3280c2bdd2ca)
@@ -117,5 +117,9 @@
 uintptr_t km_page_alloc(size_t size, size_t align)
 {
-	return ra_alloc(km_ni_arena, size, align);
+	uintptr_t base;
+	if (ra_alloc(km_ni_arena, size, align, &base))
+		return base;
+	else
+		return (uintptr_t) NULL;
 }
 
