Index: uspace/srv/logger/logs.c
===================================================================
--- uspace/srv/logger/logs.c	(revision 3cf862fd42e4f830d1960e02ad6e05ba615222ec)
+++ uspace/srv/logger/logs.c	(revision f5da671c92858a1624e2fefc8e14b7643ada8474)
@@ -53,11 +53,23 @@
 }
 
-static logger_dest_t *create_dest(const char *name)
+static int create_dest(const char *name, logger_dest_t **dest)
 {
 	logger_dest_t *result = malloc(sizeof(logger_dest_t));
+	if (result == NULL)
+		return ENOMEM;
 	char *logfilename;
-	asprintf(&logfilename, "/log/%s", name);
+	int rc = asprintf(&logfilename, "/log/%s", name);
+	if (rc < 0) {
+		free(result);
+		return ENOMEM;
+	}
 	result->logfile = fopen(logfilename, "a");
-	return result;
+	free(logfilename);
+	if (result->logfile == NULL) {
+		free(result);
+		return ENOMEM;
+	}
+	*dest = result;
+	return EOK;
 }
 
@@ -73,8 +85,7 @@
 		goto leave;
 
-	result = malloc(sizeof(logger_log_t));
+	result = calloc(1, sizeof(logger_log_t));
 	if (result == NULL)
 		goto leave;
-
 
 	result->logged_level = LOG_LEVEL_USE_DEFAULT;
@@ -82,7 +93,12 @@
 	if (parent == NULL) {
 		result->full_name = str_dup(name);
-		result->dest = create_dest(name);
+		int rc = create_dest(name, &result->dest);
+		if (rc != EOK)
+			goto error_result_allocated;
 	} else {
-		asprintf(&result->full_name, "%s/%s", parent->full_name, name);
+		int rc = asprintf(&result->full_name, "%s/%s",
+		    parent->full_name, name);
+		if (rc < 0)
+			goto error_result_allocated;
 		result->dest = parent->dest;
 	}
@@ -95,8 +111,16 @@
 
 	list_append(&result->link, &log_list);
+
+
 leave:
 	fibril_mutex_unlock(&log_list_guard);
 
 	return result;
+
+error_result_allocated:
+	free(result->name);
+	free(result->full_name);
+	free(result);
+	return NULL;
 }
 
