Index | Thread | Search

From:
Kirill A. Korinsky <kirill@korins.ky>
Subject:
Re: relayd: check all return values
To:
Rafael Sadowski <rafael@sizeofvoid.org>
Cc:
tech@openbsd.org
Date:
Sun, 19 Jul 2026 11:12:52 +0200

Download raw body.

Thread
On Sun, 19 Jul 2026 07:43:12 +0200,
Rafael Sadowski <rafael@sizeofvoid.org> wrote:
> 
> OK?
>

Reads OK and make sense.

> 
> 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) {
> 

-- 
wbr, Kirill