Index: kernel/generic/src/console/cmd.c
===================================================================
--- kernel/generic/src/console/cmd.c	(revision ae7d03c05f24b857bbbdbcf3dafbf8ecc6c286ab)
+++ kernel/generic/src/console/cmd.c	(revision 13db20447e9ad45e946906ed3a8fb2e7b7de7f23)
@@ -1465,5 +1465,6 @@
 		return true;
 
-	uint64_t *data = (uint64_t *) malloc(sizeof(uint64_t) * cnt, 0);
+	uint64_t *data = (uint64_t *) malloc(sizeof(uint64_t) * cnt,
+	    FRAME_ATOMIC);
 	if (data == NULL) {
 		printf("Error allocating memory for statistics\n");
Index: kernel/generic/src/console/console.c
===================================================================
--- kernel/generic/src/console/console.c	(revision ae7d03c05f24b857bbbdbcf3dafbf8ecc6c286ab)
+++ kernel/generic/src/console/console.c	(revision 13db20447e9ad45e946906ed3a8fb2e7b7de7f23)
@@ -411,5 +411,5 @@
 
 	if (size > 0) {
-		data = (char *) malloc(size + 1, 0);
+		data = (char *) malloc(size + 1, FRAME_ATOMIC);
 		if (!data)
 			return (sys_errno_t) ENOMEM;
Index: kernel/generic/src/console/kconsole.c
===================================================================
--- kernel/generic/src/console/kconsole.c	(revision ae7d03c05f24b857bbbdbcf3dafbf8ecc6c286ab)
+++ kernel/generic/src/console/kconsole.c	(revision 13db20447e9ad45e946906ed3a8fb2e7b7de7f23)
@@ -298,5 +298,7 @@
 		end++;
 
-	tmp = malloc(STR_BOUNDS(end - start + 1), 0);
+	tmp = malloc(STR_BOUNDS(end - start + 1), FRAME_ATOMIC);
+	if (!tmp)
+		return NULL;
 
 	wstr_to_str(tmp, end - start + 1, &cmdline[start]);
Index: kernel/generic/src/ipc/irq.c
===================================================================
--- kernel/generic/src/ipc/irq.c	(revision ae7d03c05f24b857bbbdbcf3dafbf8ecc6c286ab)
+++ kernel/generic/src/ipc/irq.c	(revision 13db20447e9ad45e946906ed3a8fb2e7b7de7f23)
@@ -82,5 +82,7 @@
 {
 	/* Copy the physical base addresses aside. */
-	uintptr_t *pbase = malloc(rangecount * sizeof(uintptr_t), 0);
+	uintptr_t *pbase = malloc(rangecount * sizeof(uintptr_t), FRAME_ATOMIC);
+	if (!pbase)
+		return ENOMEM;
 	for (size_t i = 0; i < rangecount; i++)
 		pbase[i] = ranges[i].base;
@@ -225,5 +227,7 @@
 	irq_cmd_t *cmds = NULL;
 
-	irq_code_t *code = malloc(sizeof(*code), 0);
+	irq_code_t *code = malloc(sizeof(*code), FRAME_ATOMIC);
+	if (!code)
+		return NULL;
 	errno_t rc = copy_from_uspace(code, ucode, sizeof(*code));
 	if (rc != EOK)
@@ -234,5 +238,8 @@
 		goto error;
 
-	ranges = malloc(sizeof(code->ranges[0]) * code->rangecount, 0);
+	ranges = malloc(sizeof(code->ranges[0]) * code->rangecount,
+	    FRAME_ATOMIC);
+	if (!ranges)
+		goto error;
 	rc = copy_from_uspace(ranges, code->ranges,
 	    sizeof(code->ranges[0]) * code->rangecount);
@@ -240,5 +247,7 @@
 		goto error;
 
-	cmds = malloc(sizeof(code->cmds[0]) * code->cmdcount, 0);
+	cmds = malloc(sizeof(code->cmds[0]) * code->cmdcount, FRAME_ATOMIC);
+	if (!cmds)
+		goto error;
 	rc = copy_from_uspace(cmds, code->cmds,
 	    sizeof(code->cmds[0]) * code->cmdcount);
Index: kernel/generic/src/ipc/ops/dataread.c
===================================================================
--- kernel/generic/src/ipc/ops/dataread.c	(revision ae7d03c05f24b857bbbdbcf3dafbf8ecc6c286ab)
+++ kernel/generic/src/ipc/ops/dataread.c	(revision 13db20447e9ad45e946906ed3a8fb2e7b7de7f23)
@@ -75,5 +75,9 @@
 			IPC_SET_ARG1(answer->data, dst);
 
-			answer->buffer = malloc(size, 0);
+			answer->buffer = malloc(size, FRAME_ATOMIC);
+			if (!answer->buffer) {
+				IPC_SET_RETVAL(answer->data, ENOMEM);
+				return EOK;
+			}
 			errno_t rc = copy_from_uspace(answer->buffer,
 			    (void *) src, size);
@@ -84,4 +88,5 @@
 				 * ipc_call_free().
 				 */
+				return EOK;
 			}
 		} else if (!size) {
Index: kernel/generic/src/ipc/ops/datawrite.c
===================================================================
--- kernel/generic/src/ipc/ops/datawrite.c	(revision ae7d03c05f24b857bbbdbcf3dafbf8ecc6c286ab)
+++ kernel/generic/src/ipc/ops/datawrite.c	(revision 13db20447e9ad45e946906ed3a8fb2e7b7de7f23)
@@ -56,5 +56,7 @@
 	}
 
-	call->buffer = (uint8_t *) malloc(size, 0);
+	call->buffer = (uint8_t *) malloc(size, FRAME_ATOMIC);
+	if (!call->buffer)
+		return ENOMEM;
 	errno_t rc = copy_from_uspace(call->buffer, (void *) src, size);
 	if (rc != EOK) {
Index: kernel/generic/src/lib/gsort.c
===================================================================
--- kernel/generic/src/lib/gsort.c	(revision ae7d03c05f24b857bbbdbcf3dafbf8ecc6c286ab)
+++ kernel/generic/src/lib/gsort.c	(revision 13db20447e9ad45e946906ed3a8fb2e7b7de7f23)
@@ -111,5 +111,5 @@
 
 	if (elem_size > IBUF_SIZE) {
-		slot = (void *) malloc(elem_size, 0);
+		slot = (void *) malloc(elem_size, FRAME_ATOMIC);
 		if (!slot)
 			return false;
Index: kernel/generic/src/log/log.c
===================================================================
--- kernel/generic/src/log/log.c	(revision ae7d03c05f24b857bbbdbcf3dafbf8ecc6c286ab)
+++ kernel/generic/src/log/log.c	(revision 13db20447e9ad45e946906ed3a8fb2e7b7de7f23)
@@ -307,5 +307,5 @@
 	switch (operation) {
 	case KLOG_WRITE:
-		data = (char *) malloc(size + 1, 0);
+		data = (char *) malloc(size + 1, FRAME_ATOMIC);
 		if (!data)
 			return (sys_errno_t) ENOMEM;
@@ -326,5 +326,5 @@
 		return EOK;
 	case KLOG_READ:
-		data = (char *) malloc(size, 0);
+		data = (char *) malloc(size, FRAME_ATOMIC);
 		if (!data)
 			return (sys_errno_t) ENOMEM;
Index: kernel/generic/src/main/kinit.c
===================================================================
--- kernel/generic/src/main/kinit.c	(revision ae7d03c05f24b857bbbdbcf3dafbf8ecc6c286ab)
+++ kernel/generic/src/main/kinit.c	(revision 13db20447e9ad45e946906ed3a8fb2e7b7de7f23)
@@ -209,5 +209,5 @@
 		size_t arguments_size = str_size(arguments);
 
-		void *arguments_copy = malloc(arguments_size, 0);
+		void *arguments_copy = malloc(arguments_size, FRAME_ATOMIC);
 		if (arguments_copy == NULL)
 			continue;
Index: kernel/generic/src/mm/as.c
===================================================================
--- kernel/generic/src/mm/as.c	(revision ae7d03c05f24b857bbbdbcf3dafbf8ecc6c286ab)
+++ kernel/generic/src/mm/as.c	(revision 13db20447e9ad45e946906ed3a8fb2e7b7de7f23)
@@ -620,5 +620,9 @@
 	}
 
-	as_area_t *area = (as_area_t *) malloc(sizeof(as_area_t), 0);
+	as_area_t *area = (as_area_t *) malloc(sizeof(as_area_t), FRAME_ATOMIC);
+	if (!area) {
+		mutex_unlock(&as->lock);
+		return NULL;
+	}
 
 	mutex_initialize(&area->lock, MUTEX_PASSIVE);
@@ -646,5 +650,11 @@
 	 */
 	if (!(attrs & AS_AREA_ATTR_PARTIAL)) {
-		si = (share_info_t *) malloc(sizeof(share_info_t), 0);
+		si = (share_info_t *) malloc(sizeof(share_info_t),
+		    FRAME_ATOMIC);
+		if (!si) {
+			free(area);
+			mutex_unlock(&as->lock);
+			return NULL;
+		}
 		mutex_initialize(&si->lock, MUTEX_PASSIVE);
 		si->refcount = 1;
@@ -1292,5 +1302,11 @@
 
 	/* An array for storing frame numbers */
-	uintptr_t *old_frame = malloc(used_pages * sizeof(uintptr_t), 0);
+	uintptr_t *old_frame = malloc(used_pages * sizeof(uintptr_t),
+	    FRAME_ATOMIC);
+	if (!old_frame) {
+		mutex_unlock(&area->lock);
+		mutex_unlock(&as->lock);
+		return ENOMEM;
+	}
 
 	page_table_lock(as, false);
Index: kernel/generic/src/mm/backend_phys.c
===================================================================
--- kernel/generic/src/mm/backend_phys.c	(revision ae7d03c05f24b857bbbdbcf3dafbf8ecc6c286ab)
+++ kernel/generic/src/mm/backend_phys.c	(revision 13db20447e9ad45e946906ed3a8fb2e7b7de7f23)
@@ -160,5 +160,8 @@
 		phys_shared_data_t *data;
 
-		data = (phys_shared_data_t *) malloc(sizeof(*data), 0);
+		data = (phys_shared_data_t *) malloc(sizeof(*data),
+		    FRAME_ATOMIC);
+		if (!data)
+			return false;
 
 		data->base = area->backend_data.base;
Index: kernel/generic/src/proc/program.c
===================================================================
--- kernel/generic/src/proc/program.c	(revision ae7d03c05f24b857bbbdbcf3dafbf8ecc6c286ab)
+++ kernel/generic/src/proc/program.c	(revision 13db20447e9ad45e946906ed3a8fb2e7b7de7f23)
@@ -71,8 +71,15 @@
 errno_t program_create(as_t *as, uintptr_t entry_addr, char *name, program_t *prg)
 {
+	uspace_arg_t *kernel_uarg = (uspace_arg_t *)
+	    malloc(sizeof(uspace_arg_t), FRAME_ATOMIC);
+	if (!kernel_uarg)
+		return ENOMEM;
+
 	prg->loader_status = EE_OK;
 	prg->task = task_create(as, name);
-	if (!prg->task)
+	if (!prg->task) {
+		free(kernel_uarg);
 		return ELIMIT;
+	}
 
 	/*
@@ -90,11 +97,9 @@
 	    &anon_backend, NULL, &virt, bound);
 	if (!area) {
+		free(kernel_uarg);
 		task_destroy(prg->task);
 		prg->task = NULL;
 		return ENOMEM;
 	}
-
-	uspace_arg_t *kernel_uarg = (uspace_arg_t *)
-	    malloc(sizeof(uspace_arg_t), 0);
 
 	kernel_uarg->uspace_entry = (void *) entry_addr;
Index: kernel/generic/src/proc/thread.c
===================================================================
--- kernel/generic/src/proc/thread.c	(revision ae7d03c05f24b857bbbdbcf3dafbf8ecc6c286ab)
+++ kernel/generic/src/proc/thread.c	(revision 13db20447e9ad45e946906ed3a8fb2e7b7de7f23)
@@ -949,5 +949,7 @@
 	 */
 	uspace_arg_t *kernel_uarg =
-	    (uspace_arg_t *) malloc(sizeof(uspace_arg_t), 0);
+	    (uspace_arg_t *) malloc(sizeof(uspace_arg_t), FRAME_ATOMIC);
+	if (!kernel_uarg)
+		return (sys_errno_t) ENOMEM;
 
 	rc = copy_from_uspace(kernel_uarg, uspace_uarg, sizeof(uspace_arg_t));
Index: kernel/generic/src/synch/futex.c
===================================================================
--- kernel/generic/src/synch/futex.c	(revision ae7d03c05f24b857bbbdbcf3dafbf8ecc6c286ab)
+++ 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 ae7d03c05f24b857bbbdbcf3dafbf8ecc6c286ab)
+++ 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) {
Index: kernel/generic/src/udebug/udebug_ops.c
===================================================================
--- kernel/generic/src/udebug/udebug_ops.c	(revision ae7d03c05f24b857bbbdbcf3dafbf8ecc6c286ab)
+++ kernel/generic/src/udebug/udebug_ops.c	(revision 13db20447e9ad45e946906ed3a8fb2e7b7de7f23)
@@ -370,5 +370,7 @@
 
 	/* Allocate a buffer to hold thread IDs */
-	sysarg_t *id_buffer = malloc(buf_size + 1, 0);
+	sysarg_t *id_buffer = malloc(buf_size + 1, FRAME_ATOMIC);
+	if (!id_buffer)
+		return ENOMEM;
 
 	mutex_lock(&TASK->udebug.lock);
@@ -432,5 +434,7 @@
 	size_t name_size = str_size(TASK->name) + 1;
 
-	*data = malloc(name_size, 0);
+	*data = malloc(name_size, FRAME_ATOMIC);
+	if (!*data)
+		return ENOMEM;
 	*data_size = name_size;
 
@@ -472,5 +476,9 @@
 
 	/* Prepare a buffer to hold the arguments. */
-	sysarg_t *arg_buffer = malloc(6 * sizeof(sysarg_t), 0);
+	sysarg_t *arg_buffer = malloc(6 * sizeof(sysarg_t), FRAME_ATOMIC);
+	if (!arg_buffer) {
+		_thread_op_end(thread);
+		return ENOMEM;
+	}
 
 	/* Copy to a local buffer before releasing the lock. */
@@ -514,5 +522,9 @@
 
 	/* Prepare a buffer to hold the data. */
-	istate_t *state_buf = malloc(sizeof(istate_t), 0);
+	istate_t *state_buf = malloc(sizeof(istate_t), FRAME_ATOMIC);
+	if (!state_buf) {
+		_thread_op_end(thread);
+		return ENOMEM;
+	}
 
 	/* Copy to the allocated buffer */
@@ -546,5 +558,9 @@
 	}
 
-	void *data_buffer = malloc(n, 0);
+	void *data_buffer = malloc(n, FRAME_ATOMIC);
+	if (!data_buffer) {
+		mutex_unlock(&TASK->udebug.lock);
+		return ENOMEM;
+	}
 
 	/*
