On Mon, Oct 19, 2015 at 11:31:32AM +0200, Martin Pieuchot wrote:
> Updated version below.

OK bluhm@

> 
> Index: netinet6/icmp6.c
> ===================================================================
> RCS file: /cvs/src/sys/netinet6/icmp6.c,v
> retrieving revision 1.172
> diff -u -p -r1.172 icmp6.c
> --- netinet6/icmp6.c  18 Sep 2015 14:26:22 -0000      1.172
> +++ netinet6/icmp6.c  19 Oct 2015 09:27:03 -0000
> @@ -1568,8 +1568,9 @@ icmp6_redirect_output(struct mbuf *m0, s
>               goto fail;
>  
>       /* sanity check */
> -     if (!m0 || !rt || !(rt->rt_flags & RTF_UP) || !(ifp = rt->rt_ifp))
> +     if (m0 == NULL || !rtisvalid(rt))
>               goto fail;
> +     ifp = rt->rt_ifp;
>  
>       /*
>        * Address check:
> Index: netinet6/in6_pcb.c
> ===================================================================
> RCS file: /cvs/src/sys/netinet6/in6_pcb.c,v
> retrieving revision 1.79
> diff -u -p -r1.79 in6_pcb.c
> --- netinet6/in6_pcb.c        19 Oct 2015 08:49:14 -0000      1.79
> +++ netinet6/in6_pcb.c        19 Oct 2015 09:22:32 -0000
> @@ -416,7 +416,7 @@ in6_pcbconnect(struct inpcb *inp, struct
>       if (error)
>               return (error);
>  
> -     if (inp->inp_route6.ro_rt && inp->inp_route6.ro_rt->rt_flags & RTF_UP)
> +     if (rtisvalid(inp->inp_route6.ro_rt))
>               ifp = inp->inp_route6.ro_rt->rt_ifp;
>  
>       inp->inp_ipv6.ip6_hlim = (u_int8_t)in6_selecthlim(inp, ifp);
> Index: netinet6/in6_src.c
> ===================================================================
> RCS file: /cvs/src/sys/netinet6/in6_src.c,v
> retrieving revision 1.63
> diff -u -p -r1.63 in6_src.c
> --- netinet6/in6_src.c        13 Oct 2015 10:16:17 -0000      1.63
> +++ netinet6/in6_src.c        19 Oct 2015 09:28:41 -0000
> @@ -252,7 +252,7 @@ in6_selectsrc(struct in6_addr **in6src, 
>        * our src addr is taken from the i/f, else punt.
>        */
>       if (ro) {
> -             if (!rtisvalid(ro->ro_rt) ||
> +             if (!rtisvalid(ro->ro_rt) || (ro->ro_tableid != rtableid) ||
>                   !IN6_ARE_ADDR_EQUAL(&ro->ro_dst.sin6_addr, dst)) {
>                       rtfree(ro->ro_rt);
>                       ro->ro_rt = NULL;
> @@ -327,9 +327,8 @@ in6_selectroute(struct sockaddr_in6 *dst
>                * by that address must be a neighbor of the sending host.
>                */
>               ron = &opts->ip6po_nextroute;
> -             if ((ron->ro_rt &&
> -                 (ron->ro_rt->rt_flags & (RTF_UP | RTF_GATEWAY)) !=
> -                 RTF_UP) ||
> +             if (!rtisvalid(ron->ro_rt) ||
> +                 ISSET(ron->ro_rt->rt_flags, RTF_GATEWAY) ||
>                   !IN6_ARE_ADDR_EQUAL(&ron->ro_dst.sin6_addr,
>                   &sin6_next->sin6_addr)) {
>                       if (ron->ro_rt) {
> Index: netinet6/ip6_forward.c
> ===================================================================
> RCS file: /cvs/src/sys/netinet6/ip6_forward.c,v
> retrieving revision 1.82
> diff -u -p -r1.82 ip6_forward.c
> --- netinet6/ip6_forward.c    10 Sep 2015 09:14:59 -0000      1.82
> +++ netinet6/ip6_forward.c    16 Oct 2015 13:52:06 -0000
> @@ -223,8 +223,7 @@ reroute:
>               /*
>                * ip6_forward_rt.ro_dst.sin6_addr is equal to ip6->ip6_dst
>                */
> -             if (ip6_forward_rt.ro_rt == NULL ||
> -                 (ip6_forward_rt.ro_rt->rt_flags & RTF_UP) == 0 ||
> +             if (!rtisvalid(ip6_forward_rt.ro_rt) ||
>                   ip6_forward_rt.ro_tableid != rtableid) {
>                       if (ip6_forward_rt.ro_rt) {
>                               rtfree(ip6_forward_rt.ro_rt);
> @@ -247,8 +246,7 @@ reroute:
>                       m_freem(m);
>                       return;
>               }
> -     } else if (ip6_forward_rt.ro_rt == NULL ||
> -        (ip6_forward_rt.ro_rt->rt_flags & RTF_UP) == 0 ||
> +     } else if (!rtisvalid(ip6_forward_rt.ro_rt) ||
>          !IN6_ARE_ADDR_EQUAL(&ip6->ip6_dst, &dst->sin6_addr) ||
>          ip6_forward_rt.ro_tableid != rtableid) {
>               if (ip6_forward_rt.ro_rt) {
> Index: netinet6/ip6_input.c
> ===================================================================
> RCS file: /cvs/src/sys/netinet6/ip6_input.c,v
> retrieving revision 1.147
> diff -u -p -r1.147 ip6_input.c
> --- netinet6/ip6_input.c      13 Oct 2015 10:29:16 -0000      1.147
> +++ netinet6/ip6_input.c      16 Oct 2015 13:51:22 -0000
> @@ -415,8 +415,7 @@ ip6_input(struct mbuf *m)
>       /*
>        *  Unicast check
>        */
> -     if (ip6_forward_rt.ro_rt != NULL &&
> -         (ip6_forward_rt.ro_rt->rt_flags & RTF_UP) != 0 &&
> +     if (rtisvalid(ip6_forward_rt.ro_rt) &&
>           IN6_ARE_ADDR_EQUAL(&ip6->ip6_dst,
>                              &ip6_forward_rt.ro_dst.sin6_addr) &&
>           rtableid == ip6_forward_rt.ro_tableid)
> Index: netinet6/ip6_output.c
> ===================================================================
> RCS file: /cvs/src/sys/netinet6/ip6_output.c,v
> retrieving revision 1.189
> diff -u -p -r1.189 ip6_output.c
> --- netinet6/ip6_output.c     23 Sep 2015 08:49:46 -0000      1.189
> +++ netinet6/ip6_output.c     19 Oct 2015 09:29:34 -0000
> @@ -1151,9 +1151,9 @@ ip6_getpmtu(struct route_in6 *ro_pmtu, s
>               /* The first hop and the final destination may differ. */
>               struct sockaddr_in6 *sa6_dst = &ro_pmtu->ro_dst;
>  
> -             if (ro_pmtu->ro_rt &&
> -                 ((ro_pmtu->ro_rt->rt_flags & RTF_UP) == 0 ||
> -                  !IN6_ARE_ADDR_EQUAL(&sa6_dst->sin6_addr, dst))) {
> +             if (!rtisvalid(ro_pmtu->ro_rt) ||
> +                 (ro_pmtu->ro_tableid != ifp->if_rdomain) ||
> +                  !IN6_ARE_ADDR_EQUAL(&sa6_dst->sin6_addr, dst)) {
>                       rtfree(ro_pmtu->ro_rt);
>                       ro_pmtu->ro_rt = NULL;
>               }
> Index: netinet6/raw_ip6.c
> ===================================================================
> RCS file: /cvs/src/sys/netinet6/raw_ip6.c,v
> retrieving revision 1.84
> diff -u -p -r1.84 raw_ip6.c
> --- netinet6/raw_ip6.c        11 Sep 2015 08:17:06 -0000      1.84
> +++ netinet6/raw_ip6.c        16 Oct 2015 13:53:02 -0000
> @@ -421,8 +421,7 @@ rip6_output(struct mbuf *m, ...)
>                       goto bad;
>  
>               ip6->ip6_src = *in6a;
> -             if (in6p->inp_route6.ro_rt &&
> -                 in6p->inp_route6.ro_rt->rt_flags & RTF_UP)
> +             if (rtisvalid(in6p->inp_route6.ro_rt))
>                       oifp = in6p->inp_route6.ro_rt->rt_ifp;
>       }
>  
> Index: netinet6/udp6_output.c
> ===================================================================
> RCS file: /cvs/src/sys/netinet6/udp6_output.c,v
> retrieving revision 1.37
> diff -u -p -r1.37 udp6_output.c
> --- netinet6/udp6_output.c    11 Sep 2015 08:17:06 -0000      1.37
> +++ netinet6/udp6_output.c    16 Oct 2015 13:53:26 -0000
> @@ -208,8 +208,7 @@ udp6_output(struct inpcb *in6p, struct m
>  #endif
>       ip6->ip6_nxt    = IPPROTO_UDP;
>       ifp = NULL;
> -     if (in6p->inp_route6.ro_rt &&
> -         in6p->inp_route6.ro_rt->rt_flags & RTF_UP)
> +     if (rtisvalid(in6p->inp_route6.ro_rt))
>               ifp = in6p->inp_route6.ro_rt->rt_ifp;
>       ip6->ip6_hlim   = in6_selecthlim(in6p, ifp);
>       ip6->ip6_src    = *laddr;

Reply via email to