Index: kernel/generic/src/cap/cap.c
===================================================================
--- kernel/generic/src/cap/cap.c	(revision c46bfbc57a75936518837dec2302c0f273e53b8b)
+++ kernel/generic/src/cap/cap.c	(revision 2b11c3c0cf74426080bd899202376055d7cb591d)
@@ -83,4 +83,6 @@
 #define MAX_CAPS	INT_MAX
 
+static slab_cache_t *cap_slab;
+
 static kobject_t *cap_unpublish_locked(task_t *, cap_handle_t, kobject_type_t);
 
@@ -109,4 +111,10 @@
 	.key_equal = caps_key_equal
 };
+
+void caps_init(void)
+{
+	cap_slab = slab_cache_create("cap_t", sizeof(cap_t), 0, NULL,
+	    NULL, 0);
+}
 
 /** Allocate the capability info structure
@@ -267,5 +275,5 @@
 	 */
 	if (!cap) {
-		cap = malloc(sizeof(cap_t), 0);
+		cap = slab_alloc(cap_slab, FRAME_ATOMIC);
 		if (!cap) {
 			mutex_unlock(&task->cap_info->lock);
@@ -274,5 +282,5 @@
 		uintptr_t hbase;
 		if (!ra_alloc(task->cap_info->handles, 1, 1, &hbase)) {
-			free(cap);
+			slab_free(cap_slab, cap);
 			mutex_unlock(&task->cap_info->lock);
 			return ENOMEM;
@@ -370,5 +378,5 @@
 	hash_table_remove_item(&task->cap_info->caps, &cap->caps_link);
 	ra_free(task->cap_info->handles, handle, 1);
-	free(cap);
+	slab_free(cap_slab, cap);
 	mutex_unlock(&task->cap_info->lock);
 }
