Index: kernel/generic/src/cap/cap.c
===================================================================
--- kernel/generic/src/cap/cap.c	(revision 05913fe7573b3078f8c23bfa5774302f09810a55)
+++ kernel/generic/src/cap/cap.c	(revision 1c5c96d4230e002b6875752b4cbb87808a44b364)
@@ -114,16 +114,24 @@
  * @param task  Task for which to allocate the info structure.
  */
-void caps_task_alloc(task_t *task)
-{
-	task->cap_info = (cap_info_t *) malloc(sizeof(cap_info_t), 0);
+int caps_task_alloc(task_t *task)
+{
+	task->cap_info = (cap_info_t *) malloc(sizeof(cap_info_t),
+	    FRAME_ATOMIC);
+	if (!task->cap_info)
+		return ENOMEM;
 	task->cap_info->handles = ra_arena_create();
-	// FIXME: allow caps_task_alloc() to fail 
-	assert(task->cap_info->handles);
-	bool success = ra_span_add(task->cap_info->handles, 0, MAX_CAPS);
-	// FIXME: allow caps_task_alloc() to fail 
-	assert(success);
-	success = hash_table_create(&task->cap_info->caps, 0, 0, &caps_ops);
-	// FIXME: allow caps_task_alloc() to fail 
-	assert(success);
+	if (!task->cap_info->handles)
+		goto error_handles;
+	if (!ra_span_add(task->cap_info->handles, 0, MAX_CAPS))
+		goto error_span;
+	if (!hash_table_create(&task->cap_info->caps, 0, 0, &caps_ops))
+		goto error_span;
+	return EOK;
+
+error_span:
+	ra_arena_destroy(task->cap_info->handles);
+error_handles:
+	free(task->cap_info);
+	return ENOMEM;
 }
 
