Index: kernel/generic/src/ipc/irq.c
===================================================================
--- kernel/generic/src/ipc/irq.c	(revision 18b6a8849d630cc3bca153fb21bd225eebb16f4c)
+++ kernel/generic/src/ipc/irq.c	(revision 7473807b2cbcf501c8b807c52295d1ef0e1e9f37)
@@ -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 18b6a8849d630cc3bca153fb21bd225eebb16f4c)
+++ kernel/generic/src/ipc/ops/dataread.c	(revision 7473807b2cbcf501c8b807c52295d1ef0e1e9f37)
@@ -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 18b6a8849d630cc3bca153fb21bd225eebb16f4c)
+++ kernel/generic/src/ipc/ops/datawrite.c	(revision 7473807b2cbcf501c8b807c52295d1ef0e1e9f37)
@@ -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) {
