Index: kernel/generic/src/synch/futex.c
===================================================================
--- kernel/generic/src/synch/futex.c	(revision 18b6a8849d630cc3bca153fb21bd225eebb16f4c)
+++ kernel/generic/src/synch/futex.c	(revision 13db20447e9ad45e946906ed3a8fb2e7b7de7f23)
@@ -339,5 +339,7 @@
 static futex_t *get_and_cache_futex(uintptr_t phys_addr, uintptr_t uaddr)
 {
-	futex_t *futex = malloc(sizeof(futex_t), 0);
+	futex_t *futex = malloc(sizeof(futex_t), FRAME_ATOMIC);
+	if (!futex)
+		return NULL;
 
 	/*
@@ -363,5 +365,11 @@
 	 * Cache the link to the futex object for this task.
 	 */
-	futex_ptr_t *fut_ptr = malloc(sizeof(futex_ptr_t), 0);
+	futex_ptr_t *fut_ptr = malloc(sizeof(futex_ptr_t), FRAME_ATOMIC);
+	if (!fut_ptr) {
+		spinlock_lock(&futex_ht_lock);
+		futex_release_ref(futex);
+		spinlock_unlock(&futex_ht_lock);
+		return NULL;
+	}
 	cht_link_t *dup_link;
 
Index: kernel/generic/src/synch/workqueue.c
===================================================================
--- kernel/generic/src/synch/workqueue.c	(revision 18b6a8849d630cc3bca153fb21bd225eebb16f4c)
+++ kernel/generic/src/synch/workqueue.c	(revision 13db20447e9ad45e946906ed3a8fb2e7b7de7f23)
@@ -187,5 +187,8 @@
 struct work_queue *workq_create(const char *name)
 {
-	struct work_queue *workq = malloc(sizeof(struct work_queue), 0);
+	struct work_queue *workq = malloc(sizeof(struct work_queue),
+	    FRAME_ATOMIC);
+	if (!workq)
+		return NULL;
 
 	if (workq) {
