Index: kernel/generic/src/lib/ra.c
===================================================================
--- kernel/generic/src/lib/ra.c	(revision 63e27efdf2fe6d3fa02bbb5ee1da00df5cc07e9d)
+++ kernel/generic/src/lib/ra.c	(revision a0a273e83bf1cedff09f94c8181d7f89a6c637a6)
@@ -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;
 }
 
