Index: kernel/generic/src/ipc/ops/dataread.c
===================================================================
--- kernel/generic/src/ipc/ops/dataread.c	(revision eadaeae8dacc68cf558028f23cc96b90a08b7361)
+++ kernel/generic/src/ipc/ops/dataread.c	(revision 8a1be7692f8710c1044d21f081dc5cffc0d5c33d)
@@ -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 eadaeae8dacc68cf558028f23cc96b90a08b7361)
+++ kernel/generic/src/ipc/ops/datawrite.c	(revision 8a1be7692f8710c1044d21f081dc5cffc0d5c33d)
@@ -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) {
