Index | Thread | Search

From:
Rafael Sadowski <rafael@sizeofvoid.org>
Subject:
relayd: check all return values
To:
tech@openbsd.org
Date:
Sun, 19 Jul 2026 07:43:12 +0200

Download raw body.

Thread
OK?


diff --git a/ca.c b/ca.c
index 6ce8626..8362c8b 100644
--- a/ca.c
+++ b/ca.c
@@ -195,19 +195,23 @@ ca_dispatch_parent(int fd, struct privsep_proc *p, struct imsg *imsg)
 {
 	switch (imsg_get_type(imsg)) {
 	case IMSG_CFG_RELAY:
-		config_getrelay(env, imsg);
+		if (config_getrelay(env, imsg) != 0)
+			return (-1);
 		break;
 	case IMSG_CFG_RELAY_FD:
-		config_getrelayfd(env, imsg);
+		if (config_getrelayfd(env, imsg) != 0)
+			return (-1);
 		break;
 	case IMSG_CFG_DONE:
-		config_getcfg(env, imsg);
+		if (config_getcfg(env, imsg) != 0)
+			return (-1);
 		break;
 	case IMSG_CTL_START:
 		ca_launch();
 		break;
 	case IMSG_CTL_RESET:
-		config_getreset(env, imsg);
+		if (config_getreset(env, imsg) != 0)
+			return (-1);
 		break;
 	default:
 		return -1;
diff --git a/hce.c b/hce.c
index 6c14083..924d04d 100644
--- a/hce.c
+++ b/hce.c
@@ -349,19 +349,23 @@ hce_dispatch_parent(int fd, struct privsep_proc *p, struct imsg *imsg)
 		script_done(env, &scr);
 		break;
 	case IMSG_CFG_TABLE:
-		config_gettable(env, imsg);
+		if (config_gettable(env, imsg) != 0)
+			return (-1);
 		break;
 	case IMSG_CFG_HOST:
-		config_gethost(env, imsg);
+		if (config_gethost(env, imsg) != 0)
+			return (-1);
 		break;
 	case IMSG_CFG_DONE:
-		config_getcfg(env, imsg);
+		if (config_getcfg(env, imsg) != 0)
+			return (-1);
 		break;
 	case IMSG_CTL_START:
 		hce_setup_events();
 		break;
 	case IMSG_CTL_RESET:
-		config_getreset(env, imsg);
+		if (config_getreset(env, imsg) != 0)
+			return (-1);
 		break;
 	default:
 		return (-1);
diff --git a/pfe.c b/pfe.c
index 82825f7..f3c6188 100644
--- a/pfe.c
+++ b/pfe.c
@@ -201,34 +201,44 @@ pfe_dispatch_parent(int fd, struct privsep_proc *p, struct imsg *imsg)
 {
 	switch (imsg_get_type(imsg)) {
 	case IMSG_CFG_TABLE:
-		config_gettable(env, imsg);
+		if (config_gettable(env, imsg) != 0)
+			return (-1);
 		break;
 	case IMSG_CFG_HOST:
-		config_gethost(env, imsg);
+		if (config_gethost(env, imsg) != 0)
+			return (-1);
 		break;
 	case IMSG_CFG_RDR:
-		config_getrdr(env, imsg);
+		if (config_getrdr(env, imsg) != 0)
+			return (-1);
 		break;
 	case IMSG_CFG_VIRT:
-		config_getvirt(env, imsg);
+		if (config_getvirt(env, imsg) != 0)
+			return (-1);
 		break;
 	case IMSG_CFG_ROUTER:
-		config_getrt(env, imsg);
+		if (config_getrt(env, imsg) != 0)
+			return (-1);
 		break;
 	case IMSG_CFG_ROUTE:
-		config_getroute(env, imsg);
+		if (config_getroute(env, imsg) != 0)
+			return (-1);
 		break;
 	case IMSG_CFG_PROTO:
-		config_getproto(env, imsg);
+		if (config_getproto(env, imsg) != 0)
+			return (-1);
 		break;
 	case IMSG_CFG_RELAY:
-		config_getrelay(env, imsg);
+		if (config_getrelay(env, imsg) != 0)
+			return (-1);
 		break;
 	case IMSG_CFG_RELAY_TABLE:
-		config_getrelaytable(env, imsg);
+		if (config_getrelaytable(env, imsg) != 0)
+			return (-1);
 		break;
 	case IMSG_CFG_DONE:
-		config_getcfg(env, imsg);
+		if (config_getcfg(env, imsg) != 0)
+			return (-1);
 		init_tables(env);
 		agentx_init(env);
 		break;
@@ -237,7 +247,8 @@ pfe_dispatch_parent(int fd, struct privsep_proc *p, struct imsg *imsg)
 		pfe_sync();
 		break;
 	case IMSG_CTL_RESET:
-		config_getreset(env, imsg);
+		if (config_getreset(env, imsg) != 0)
+			return (-1);
 		break;
 	case IMSG_AGENTXSOCK:
 		agentx_getsock(imsg);
diff --git a/relay.c b/relay.c
index 2f6ec5d..d0ad35d 100644
--- a/relay.c
+++ b/relay.c
@@ -2014,34 +2014,43 @@ relay_dispatch_parent(int fd, struct privsep_proc *p, struct imsg *imsg)
 		evtimer_add(&con->se_ev, &tv);
 		break;
 	case IMSG_CFG_TABLE:
-		config_gettable(env, imsg);
+		if (config_gettable(env, imsg) != 0)
+			return (-1);
 		break;
 	case IMSG_CFG_HOST:
-		config_gethost(env, imsg);
+		if (config_gethost(env, imsg) != 0)
+			return (-1);
 		break;
 	case IMSG_CFG_PROTO:
-		config_getproto(env, imsg);
+		if (config_getproto(env, imsg) != 0)
+			return (-1);
 		break;
 	case IMSG_CFG_RULE:
-		config_getrule(env, imsg);
+		if (config_getrule(env, imsg) != 0)
+			return (-1);
 		break;
 	case IMSG_CFG_RELAY:
-		config_getrelay(env, imsg);
+		if (config_getrelay(env, imsg) != 0)
+			return (-1);
 		break;
 	case IMSG_CFG_RELAY_TABLE:
-		config_getrelaytable(env, imsg);
+		if (config_getrelaytable(env, imsg) != 0)
+			return (-1);
 		break;
 	case IMSG_CFG_RELAY_FD:
-		config_getrelayfd(env, imsg);
+		if (config_getrelayfd(env, imsg) != 0)
+			return (-1);
 		break;
 	case IMSG_CFG_DONE:
-		config_getcfg(env, imsg);
+		if (config_getcfg(env, imsg) != 0)
+			return (-1);
 		break;
 	case IMSG_CTL_START:
 		relay_launch();
 		break;
 	case IMSG_CTL_RESET:
-		config_getreset(env, imsg);
+		if (config_getreset(env, imsg) != 0)
+			return (-1);
 		break;
 	case IMSG_TLSTICKET_REKEY:
 		if (imsg_get_data(imsg, &env->sc_ticket,
diff --git a/relayd.c b/relayd.c
index 7e3e6cc..64c3bec 100644
--- a/relayd.c
+++ b/relayd.c
@@ -414,7 +414,8 @@ parent_dispatch_pfe(int fd, struct privsep_proc *p, struct imsg *imsg)
 			return (-1);
 		}
 		demote.group[sizeof(demote.group) - 1] = '\0';
-		carp_demote_set(demote.group, demote.level);
+		if (carp_demote_set(demote.group, demote.level) != 0)
+			return (-1);
 		break;
 	case IMSG_RTMSG:
 		if (imsg_get_data(imsg, &crt, sizeof(crt)) == -1) {
@@ -424,7 +425,8 @@ parent_dispatch_pfe(int fd, struct privsep_proc *p, struct imsg *imsg)
 		crt.host.name[sizeof(crt.host.name) - 1] = '\0';
 		crt.rt.name[sizeof(crt.rt.name) - 1] = '\0';
 		crt.rt.label[sizeof(crt.rt.label) - 1] = '\0';
-		pfe_route(env, &crt);
+		if (pfe_route(env, &crt) != 0)
+			return (-1);
 		break;
 	case IMSG_CTL_RESET:
 		if (imsg_get_data(imsg, &v, sizeof(v)) == -1) {