From: Kirill A. Korinsky Subject: Re: relayd: check all return values To: Rafael Sadowski Cc: tech@openbsd.org Date: Sun, 19 Jul 2026 11:12:52 +0200 On Sun, 19 Jul 2026 07:43:12 +0200, Rafael Sadowski 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