Index: uspace/srv/net/loopip/loopip.c
===================================================================
--- uspace/srv/net/loopip/loopip.c	(revision b4edc96c3455b41ece7d35a9752221342dec22f8)
+++ uspace/srv/net/loopip/loopip.c	(revision ed1a948bd3e432a2b365592aefbf84cf73a3fa9f)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2021 Jiri Svoboda
+ * Copyright (c) 2023 Jiri Svoboda
  * All rights reserved.
  *
@@ -103,7 +103,9 @@
 static errno_t loopip_init(void)
 {
+	loc_srv_t *srv;
+
 	async_set_fallback_port_handler(loopip_client_conn, NULL);
 
-	errno_t rc = loc_server_register(NAME);
+	errno_t rc = loc_server_register(NAME, &srv);
 	if (rc != EOK) {
 		log_msg(LOG_DEFAULT, LVL_ERROR, "Failed registering server.");
@@ -119,6 +121,7 @@
 	const char *svc_name = "net/loopback";
 	service_id_t sid;
-	rc = loc_service_register(svc_name, &sid);
-	if (rc != EOK) {
+	rc = loc_service_register(srv, svc_name, &sid);
+	if (rc != EOK) {
+		loc_server_unregister(srv);
 		log_msg(LOG_DEFAULT, LVL_ERROR, "Failed registering service %s.",
 		    svc_name);
@@ -129,10 +132,14 @@
 	rc = loc_category_get_id("iplink", &iplink_cat, IPC_FLAG_BLOCKING);
 	if (rc != EOK) {
+		loc_service_unregister(srv, sid);
+		loc_server_unregister(srv);
 		log_msg(LOG_DEFAULT, LVL_ERROR, "Failed resolving category 'iplink'.");
 		return rc;
 	}
 
-	rc = loc_service_add_to_cat(sid, iplink_cat);
-	if (rc != EOK) {
+	rc = loc_service_add_to_cat(srv, sid, iplink_cat);
+	if (rc != EOK) {
+		loc_service_unregister(srv, sid);
+		loc_server_unregister(srv);
 		log_msg(LOG_DEFAULT, LVL_ERROR, "Failed adding %s to category.",
 		    svc_name);
@@ -141,6 +148,9 @@
 
 	fid_t fid = fibril_create(loopip_recv_fibril, NULL);
-	if (fid == 0)
-		return ENOMEM;
+	if (fid == 0) {
+		loc_service_unregister(srv, sid);
+		loc_server_unregister(srv);
+		return ENOMEM;
+	}
 
 	fibril_add_ready(fid);
