Re: relayd: use imsg_get_type and imsg_get_type
Theo Buehler <[email protected]> Tue, 28 Jul 2026 21:37:30 +0200
| Newsgroups | gmane.os.openbsd.tech |
|---|---|
| Message-ID | <[email protected]> |
On Sat, Jul 25, 2026 at 07:23:56PM +0200, Rafael Sadowski wrote: > OK? > > commit 0b7c23a563ac96506f78c660a431a3e3d6f2d020 > Author: Rafael Sadowski <[email protected]> > Date: Sat Jul 25 19:20:21 2026 +0200 > > relayd: use imsg_get_type and imsg_get_type Feels like two commits (one for relayd.c and one for the other two) and the second one concerns imsg_get_data, not imsg_get_type. > > diff --git a/hce.c b/hce.c > index 82f3003..05c1555 100644 > --- a/hce.c > +++ b/hce.c > @@ -291,7 +291,8 @@ hce_dispatch_pfe(int fd, struct privsep_proc *p, struct imsg *imsg) > > switch (imsg_get_type(imsg)) { > case IMSG_HOST_DISABLE: > - memcpy(&id, imsg->data, sizeof(id)); > + if (imsg_get_data(imsg, &id, sizeof(id)) == -1) > + return (-1); It might be preferable to fatal explicitly rather than having readers go look at the reykian proc.c where it falls through to another fatalx() in proc_dispatch(). If that's intentional deduplication, I guess it's fine, it's just a bit confusing for the casual reader. > if ((host = host_find(env, id)) == NULL) > fatalx("%s: desynchronized", __func__); > host->flags |= F_DISABLE; > @@ -301,7 +302,8 @@ hce_dispatch_pfe(int fd, struct privsep_proc *p, struct imsg *imsg) > host->he = HCE_NONE; > break; > case IMSG_HOST_ENABLE: > - memcpy(&id, imsg->data, sizeof(id)); > + if (imsg_get_data(imsg, &id, sizeof(id)) == -1) > + return (-1); > if ((host = host_find(env, id)) == NULL) > fatalx("%s: desynchronized", __func__); > host->flags &= ~(F_DISABLE); > @@ -309,7 +311,8 @@ hce_dispatch_pfe(int fd, struct privsep_proc *p, struct imsg *imsg) > host->he = HCE_NONE; > break; > case IMSG_TABLE_DISABLE: > - memcpy(&id, imsg->data, sizeof(id)); > + if (imsg_get_data(imsg, &id, sizeof(id)) == -1) > + return (-1); > if ((table = table_find(env, id)) == NULL) > fatalx("%s: desynchronized", __func__); > table->conf.flags |= F_DISABLE; > @@ -317,7 +320,8 @@ hce_dispatch_pfe(int fd, struct privsep_proc *p, struct imsg *imsg) > host->up = HOST_UNKNOWN; > break; > case IMSG_TABLE_ENABLE: > - memcpy(&id, imsg->data, sizeof(id)); > + if (imsg_get_data(imsg, &id, sizeof(id)) == -1) > + return (-1); > if ((table = table_find(env, id)) == NULL) > fatalx("%s: desynchronized", __func__); > table->conf.flags &= ~(F_DISABLE); > diff --git a/relay.c b/relay.c > index 412ae74..58e57b7 100644 > --- a/relay.c > +++ b/relay.c > @@ -1870,7 +1870,8 @@ relay_dispatch_pfe(int fd, struct privsep_proc *p, struct imsg *imsg) > > switch (imsg_get_type(imsg)) { > case IMSG_HOST_DISABLE: > - memcpy(&id, imsg->data, sizeof(id)); > + if (imsg_get_data(imsg, &id, sizeof(id)) == -1) > + return (-1); > if ((host = host_find(env, id)) == NULL) > fatalx("%s: desynchronized", __func__); > if ((table = table_find(env, host->conf.tableid)) == > @@ -1882,14 +1883,16 @@ relay_dispatch_pfe(int fd, struct privsep_proc *p, struct imsg *imsg) > host->up = HOST_UNKNOWN; > break; > case IMSG_HOST_ENABLE: > - memcpy(&id, imsg->data, sizeof(id)); > + if (imsg_get_data(imsg, &id, sizeof(id)) == -1) > + return (-1); > if ((host = host_find(env, id)) == NULL) > fatalx("%s: desynchronized", __func__); > host->flags &= ~(F_DISABLE); > host->up = HOST_UNKNOWN; > break; > case IMSG_TABLE_DISABLE: > - memcpy(&id, imsg->data, sizeof(id)); > + if (imsg_get_data(imsg, &id, sizeof(id)) == -1) > + return (-1); > if ((table = table_find(env, id)) == NULL) > fatalx("%s: desynchronized", __func__); > table->conf.flags |= F_DISABLE; > @@ -1898,7 +1901,8 @@ relay_dispatch_pfe(int fd, struct privsep_proc *p, struct imsg *imsg) > host->up = HOST_UNKNOWN; > break; > case IMSG_TABLE_ENABLE: > - memcpy(&id, imsg->data, sizeof(id)); > + if (imsg_get_data(imsg, &id, sizeof(id)) == -1) > + return (-1); > if ((table = table_find(env, id)) == NULL) > fatalx("%s: desynchronized", __func__); > table->conf.flags &= ~(F_DISABLE); > @@ -1939,7 +1943,8 @@ relay_dispatch_pfe(int fd, struct privsep_proc *p, struct imsg *imsg) > host->up = st.up; > break; > case IMSG_NATLOOK: > - bcopy(imsg->data, &cnl, sizeof(cnl)); > + if (imsg_get_data(imsg, &cnl, sizeof(cnl)) == -1) > + return (-1); > if ((con = session_find(env, cnl.id)) == NULL || > con->se_cnl == NULL) { > log_debug("%s: session %d: expired", > @@ -2001,7 +2006,8 @@ relay_dispatch_parent(int fd, struct privsep_proc *p, struct imsg *imsg) > > switch (imsg_get_type(imsg)) { > case IMSG_BINDANY: > - bcopy(imsg->data, &id, sizeof(id)); > + if (imsg_get_data(imsg, &id, sizeof(id)) == -1) > + return (-1); > if ((con = session_find(env, id)) == NULL) { > log_debug("%s: session %d: expired", > __func__, id); > diff --git a/relayd.c b/relayd.c > index 7b8af3b..b174fc8 100644 > --- a/relayd.c > +++ b/relayd.c > @@ -407,7 +407,7 @@ parent_dispatch_pfe(int fd, struct privsep_proc *p, struct imsg *imsg) > char *str = NULL; > size_t s; > > - switch (imsg->hdr.type) { > + switch (imsg_get_type(imsg)) { > case IMSG_DEMOTE: > if (imsg_get_data(imsg, &demote, sizeof(demote)) == -1) { > log_warn("%s: imsg_get_data", __func__); > @@ -469,7 +469,7 @@ parent_dispatch_hce(int fd, struct privsep_proc *p, struct imsg *imsg) > struct relayd *env = ps->ps_env; > struct ctl_script scr; > > - switch (imsg->hdr.type) { > + switch (imsg_get_type(imsg)) { > case IMSG_SCRIPT: > if (imsg_get_data(imsg, &scr, sizeof(scr)) == -1) { > log_warn("%s: imsg_get_data", __func__); > @@ -498,7 +498,7 @@ parent_dispatch_relay(int fd, struct privsep_proc *p, struct imsg *imsg) > struct ctl_bindany bnd; > int s; > > - switch (imsg->hdr.type) { > + switch (imsg_get_type(imsg)) { > case IMSG_BINDANY: > if (imsg_get_data(imsg, &bnd, sizeof(bnd)) == -1) { > log_warn("%s: imsg_get_data", __func__); > @@ -537,7 +537,7 @@ parent_dispatch_ca(int fd, struct privsep_proc *p, struct imsg *imsg) > struct privsep *ps = p->p_ps; > struct relayd *env = ps->ps_env; > > - switch (imsg->hdr.type) { > + switch (imsg_get_type(imsg)) { > case IMSG_CFG_DONE: > parent_configure_done(env); > break; >