Index: kernel/generic/include/adt/fifo.h
===================================================================
--- kernel/generic/include/adt/fifo.h	(revision b389f95fd25d0be6a3cd052888913d93795b9d83)
+++ kernel/generic/include/adt/fifo.h	(revision 4f3aa7644f25e335cbce9f680ef7e5e6aa6032a5)
@@ -115,5 +115,5 @@
  */
 #define fifo_create(name) \
-	name.fifo = nfmalloc(sizeof(*name.fifo) * name.items)
+	name.fifo = malloc(sizeof(*name.fifo) * name.items)
 
 #endif
Index: kernel/generic/include/mm/slab.h
===================================================================
--- kernel/generic/include/mm/slab.h	(revision b389f95fd25d0be6a3cd052888913d93795b9d83)
+++ kernel/generic/include/mm/slab.h	(revision 4f3aa7644f25e335cbce9f680ef7e5e6aa6032a5)
@@ -146,7 +146,4 @@
 extern void free(void *);
 
-extern void *nfmalloc(size_t)
-    __attribute__((malloc, returns_nonnull));
-
 #endif
 
Index: kernel/generic/src/console/kconsole.c
===================================================================
--- kernel/generic/src/console/kconsole.c	(revision b389f95fd25d0be6a3cd052888913d93795b9d83)
+++ kernel/generic/src/console/kconsole.c	(revision 4f3aa7644f25e335cbce9f680ef7e5e6aa6032a5)
@@ -219,8 +219,14 @@
 	const char *hint;
 	const char *help;
-	char *output = nfmalloc(MAX_CMDLINE);
 	size_t hints_to_show = MAX_TAB_HINTS - 1;
 	size_t total_hints_shown = 0;
 	bool continue_showing_hints = true;
+
+	char *output = malloc(MAX_CMDLINE);
+	if (!output) {
+		// TODO: fix the function so that it does not need allocation
+		printf("Can't complete command, out of memory.\n");
+		return 0;
+	}
 
 	output[0] = 0;
@@ -325,5 +331,6 @@
 }
 
-NO_TRACE static wchar_t *clever_readline(const char *prompt, indev_t *indev)
+NO_TRACE static wchar_t *clever_readline(const char *prompt, indev_t *indev,
+    char *tmp)
 {
 	printf("%s> ", prompt);
@@ -332,5 +339,4 @@
 	wchar_t *current = history[history_pos];
 	current[0] = 0;
-	char *tmp = nfmalloc(STR_BOUNDS(MAX_CMDLINE));
 
 	while (true) {
@@ -534,5 +540,4 @@
 	}
 
-	free(tmp);
 	return current;
 }
@@ -809,7 +814,16 @@
 		printf("Type \"exit\" to leave the console.\n");
 
-	char *cmdline = nfmalloc(STR_BOUNDS(MAX_CMDLINE));
+	char *buffer = malloc(STR_BOUNDS(MAX_CMDLINE));
+	char *cmdline = malloc(STR_BOUNDS(MAX_CMDLINE));
+	if (!buffer || !cmdline) {
+		// TODO: fix the function so that it does not need allocations
+		printf("Can't start console, out of memory.\n");
+		free(buffer);
+		free(cmdline);
+		return;
+	}
+
 	while (true) {
-		wchar_t *tmp = clever_readline((char *) prompt, stdin);
+		wchar_t *tmp = clever_readline((char *) prompt, stdin, buffer);
 		size_t len = wstr_length(tmp);
 		if (!len)
@@ -827,4 +841,5 @@
 		(void) cmd_info->func(cmd_info->argv);
 	}
+	free(buffer);
 	free(cmdline);
 }
Index: kernel/generic/src/lib/str.c
===================================================================
--- kernel/generic/src/lib/str.c	(revision b389f95fd25d0be6a3cd052888913d93795b9d83)
+++ kernel/generic/src/lib/str.c	(revision 4f3aa7644f25e335cbce9f680ef7e5e6aa6032a5)
@@ -635,6 +635,7 @@
 {
 	size_t size = str_size(src) + 1;
-	char *dest = nfmalloc(size);
-	assert(dest);
+	char *dest = malloc(size);
+	if (!dest)
+		return NULL;
 
 	str_cpy(dest, size, src);
@@ -668,6 +669,7 @@
 		size = n;
 
-	char *dest = nfmalloc(size + 1);
-	assert(dest);
+	char *dest = malloc(size + 1);
+	if (!dest)
+		return NULL;
 
 	str_ncpy(dest, size + 1, src, size);
Index: kernel/generic/src/mm/slab.c
===================================================================
--- kernel/generic/src/mm/slab.c	(revision b389f95fd25d0be6a3cd052888913d93795b9d83)
+++ kernel/generic/src/mm/slab.c	(revision 4f3aa7644f25e335cbce9f680ef7e5e6aa6032a5)
@@ -954,5 +954,5 @@
 }
 
-static void *_malloc(size_t size, unsigned int flags)
+void *malloc(size_t size)
 {
 	assert(_slab_initialized);
@@ -964,21 +964,8 @@
 	uint8_t idx = fnzb(size - 1) - SLAB_MIN_MALLOC_W + 1;
 
-	return slab_alloc(malloc_caches[idx], flags);
-}
-
-void *malloc(size_t size)
-{
-	return _malloc(size, FRAME_ATOMIC);
-}
-
-/** Non-failing malloc.
- *  Never returns NULL, but may block forever if no memory is available.
- */
-void *nfmalloc(size_t size)
-{
-	return _malloc(size, 0);
-}
-
-static void *_realloc(void *ptr, size_t size, unsigned int flags)
+	return slab_alloc(malloc_caches[idx], FRAME_ATOMIC);
+}
+
+void *realloc(void *ptr, size_t size)
 {
 	assert(_slab_initialized);
@@ -992,5 +979,5 @@
 		uint8_t idx = fnzb(size - 1) - SLAB_MIN_MALLOC_W + 1;
 
-		new_ptr = slab_alloc(malloc_caches[idx], flags);
+		new_ptr = slab_alloc(malloc_caches[idx], FRAME_ATOMIC);
 	} else
 		new_ptr = NULL;
@@ -1007,9 +994,4 @@
 }
 
-void *realloc(void *ptr, size_t size)
-{
-	return _realloc(ptr, size, FRAME_ATOMIC);
-}
-
 void free(void *ptr)
 {
Index: kernel/generic/src/sysinfo/sysinfo.c
===================================================================
--- kernel/generic/src/sysinfo/sysinfo.c	(revision b389f95fd25d0be6a3cd052888913d93795b9d83)
+++ kernel/generic/src/sysinfo/sysinfo.c	(revision 4f3aa7644f25e335cbce9f680ef7e5e6aa6032a5)
@@ -685,6 +685,8 @@
 		return ret;
 
-	char *path = (char *) nfmalloc(size + 1);
-	assert(path);
+	// TODO: Change this so that allocation is not needed.
+	char *path = malloc(size + 1);
+	if (!path)
+		return ret;
 
 	if ((copy_from_uspace(path, ptr, size + 1) == 0) &&
@@ -794,6 +796,8 @@
 		return ret;
 
-	char *path = (char *) nfmalloc(size + 1);
-	assert(path);
+	// TODO: Change this so that allocation is not needed.
+	char *path = malloc(size + 1);
+	if (!path)
+		return ret;
 
 	if ((copy_from_uspace(path, ptr, size + 1) == 0) &&
