On Mon, Jul 10, 2017 at 08:04:26AM +0000, Florian Obser wrote: > I think it's time...
Great, no default router, no prefix list! Does slaacd support on-link detection? I don't know if it worked before, it could be implemented later, and I don't mind if we loose it. Just asking out of curiosity. > @@ -370,32 +166,15 @@ void > nd6_ra_input(struct mbuf *m, int off, int icmp6len) > { > struct ifnet *ifp; > - struct nd_ifinfo *ndi; > struct ip6_hdr *ip6 = mtod(m, struct ip6_hdr *); > struct nd_router_advert *nd_ra; > struct in6_addr saddr6 = ip6->ip6_src; > + char *lladdr = NULL; > + int lladdrlen = 0; > union nd_opts ndopts; > - struct nd_defrouter *dr; > char src[INET6_ADDRSTRLEN], dst[INET6_ADDRSTRLEN]; > > - ifp = if_get(m->m_pkthdr.ph_ifidx); > - if (ifp == NULL) > - goto freeit; > - > - goto freeit; > - > - /* We accept RAs only if inet6 autoconf is enabled */ > - if (!(ifp->if_xflags & IFXF_AUTOCONF6)) > - goto freeit; > - > - ndi = ND_IFINFO(ifp); > - if (!(ndi->flags & ND6_IFF_ACCEPT_RTADV)) > - goto freeit; > - > - if (nd6_rs_output_timeout != ND6_RS_OUTPUT_INTERVAL) > - /* we saw a RA, stop quick timer */ > - nd6_rs_output_set_timo(ND6_RS_OUTPUT_INTERVAL); > - > + /* Sanity checks */ > if (ip6->ip6_hlim != 255) { > nd6log((LOG_ERR, > "nd6_ra_input: invalid hlim (%d) from %s to %s on %s\n", > @@ -416,7 +195,6 @@ nd6_ra_input(struct mbuf *m, int off, int icmp6len) > IP6_EXTHDR_GET(nd_ra, struct nd_router_advert *, m, off, icmp6len); > if (nd_ra == NULL) { > icmp6stat_inc(icp6s_tooshort); > - if_put(ifp); > return; > } > Between these chunks there is still a reference to ifp->if_xname in a nd6log() message. ifp is uninitialized now. with that fixed, OK bluhm@