OK florian@ On Thu, Jun 29, 2017 at 09:26:16PM +0000, Rivo Nurges wrote: > Hi! > > config_setrelay>relay_privinit>relay_udp_privinit doesn't set env > since env isn't set in relay.c yet, causing dns relay to SIGSEGV > in relay_udp_server. Move setting env to relay_udp_init. > > Rivo > > Index: usr.sbin/relayd/relay.c > =================================================================== > RCS file: /cvs/src/usr.sbin/relayd/relay.c,v > retrieving revision 1.221 > diff -u -p -r1.221 relay.c > --- usr.sbin/relayd/relay.c 28 May 2017 10:39:15 -0000 1.221 > +++ usr.sbin/relayd/relay.c 29 Jun 2017 20:58:08 -0000 > @@ -285,7 +285,7 @@ relay_privinit(struct relay *rlay) > > switch (rlay->rl_proto->type) { > case RELAY_PROTO_DNS: > - relay_udp_privinit(env, rlay); > + relay_udp_privinit(rlay); > break; > case RELAY_PROTO_TCP: > break; > @@ -445,7 +445,7 @@ relay_launch(void) > > switch (rlay->rl_proto->type) { > case RELAY_PROTO_DNS: > - relay_udp_init(rlay); > + relay_udp_init(env, rlay); > break; > case RELAY_PROTO_TCP: > case RELAY_PROTO_HTTP: > Index: usr.sbin/relayd/relay_udp.c > =================================================================== > RCS file: /cvs/src/usr.sbin/relayd/relay_udp.c,v > retrieving revision 1.46 > diff -u -p -r1.46 relay_udp.c > --- usr.sbin/relayd/relay_udp.c 28 May 2017 10:39:15 -0000 1.46 > +++ usr.sbin/relayd/relay_udp.c 29 Jun 2017 20:58:08 -0000 > @@ -58,20 +58,20 @@ void relay_dns_result(struct rsession > int relay_dns_cmp(struct rsession *, struct rsession *); > > void > -relay_udp_privinit(struct relayd *x_env, struct relay *rlay) > +relay_udp_privinit(struct relay *rlay) > { > - if (env == NULL) > - env = x_env; > - > if (rlay->rl_conf.flags & F_TLS) > fatalx("tls over udp is not supported"); > rlay->rl_conf.flags |= F_UDP; > } > > void > -relay_udp_init(struct relay *rlay) > +relay_udp_init(struct relayd *x_env, struct relay *rlay) > { > struct protocol *proto = rlay->rl_proto; > + > + if (env == NULL) > + env = x_env; > > switch (proto->type) { > case RELAY_PROTO_DNS: > Index: usr.sbin/relayd/relayd.h > =================================================================== > RCS file: /cvs/src/usr.sbin/relayd/relayd.h,v > retrieving revision 1.240 > diff -u -p -r1.240 relayd.h > --- usr.sbin/relayd/relayd.h 27 May 2017 08:33:25 -0000 1.240 > +++ usr.sbin/relayd/relayd.h 29 Jun 2017 20:58:08 -0000 > @@ -1218,8 +1218,8 @@ int relay_httpdesc_init(struct ctl_rela > ssize_t relay_http_time(time_t, char *, size_t); > > /* relay_udp.c */ > -void relay_udp_privinit(struct relayd *, struct relay *); > -void relay_udp_init(struct relay *); > +void relay_udp_privinit(struct relay *); > +void relay_udp_init(struct relayd *, struct relay *); > int relay_udp_bind(struct sockaddr_storage *, in_port_t, > struct protocol *); > void relay_udp_server(int, short, void *); > >
-- I'm not entirely sure you are real.