On Mon, Aug 06, 2018 at 03:26:16PM +0200, Pierre Emeriaud wrote: > Not sure about this, I guess if you're using 'network bulk add|del' > you're supposed to know what you're doing and not shoot yourself in > the foot, but here it goes: > > echo | bgpctl network bulk del > crashes bgpd. On 6.3 and current as of today at least. > > $ doas bgpd -dvf bgpd.conf > startup > rereading config > route decision engine ready > session engine ready > myas = "64751" > ktable_new: rdomain_0 for rtableid 0 > listening on 127.0.0.1 > SE reconfigured > RDE reconfigured > > #### bgpd started, time to run 'echo | bgpctl network bulk del' > > fatal in RDE: pt_fill: unknown af > peer closed imsg connection > main: Lost connection to RDE > peer closed imsg connection > SE: Lost connection to parent > session engine exiting > kernel routing table 0 (Loc-RIB) decoupled > ktable_destroy: freeing ktable Loc-RIB rtableid 0 > waiting for children to terminate > terminating > > > This somewhat fixes the empty line issue, but it's still possible to > crash with any other string not beeing an ip prefix. A better > workaround would be parse prefixes beforehand, or maybe just don't be > a moron and don't feed bgpctl with anything stupid. > > Index: bgpctl.c > =================================================================== > RCS file: /cvs/src/usr.sbin/bgpctl/bgpctl.c,v > retrieving revision 1.210 > diff -u -p -r1.210 bgpctl.c > --- bgpctl.c 29 Jul 2018 13:02:01 -0000 1.210 > +++ bgpctl.c 6 Aug 2018 13:11:23 -0000 > @@ -1978,6 +1978,9 @@ network_bulk(struct parse_result *res) > /* Don't process commented entries */ > if (strchr(b, '#') != NULL) > break; > + /* Don't process empty lines */ > + if (strcmp(b, "\0") == 0) > + break; > bzero(&net, sizeof(net)); > parse_prefix(b, strlen(b), &h, &len); > net.prefix = h; >
Thanks for the diff and the report. I will look into this. -- :wq Claudio