On Thu, Mar 02, 2017 at 11:41:00AM +0100, Martin Pieuchot wrote:
> ok?

OK bluhm@

> 
> Index: netinet6/nd6.c
> ===================================================================
> RCS file: /cvs/src/sys/netinet6/nd6.c,v
> retrieving revision 1.204
> diff -u -p -r1.204 nd6.c
> --- netinet6/nd6.c    2 Mar 2017 09:24:02 -0000       1.204
> +++ netinet6/nd6.c    2 Mar 2017 10:37:14 -0000
> @@ -1156,18 +1156,29 @@ nd6_ioctl(u_long cmd, caddr_t data, stru
>  
>               /* First purge the addresses referenced by a prefix. */
>               LIST_FOREACH_SAFE(pr, &nd_prefix, ndpr_entry, npr) {
> -                     struct in6_ifaddr *ia6, *ia6_next;
> +                     struct ifnet *ifp;
> +                     struct ifaddr *ifa, *nifa;
> +                     struct in6_ifaddr *ia6;
>  
>                       if (IN6_IS_ADDR_LINKLOCAL(&pr->ndpr_prefix.sin6_addr))
>                               continue; /* XXX */
>  
>                       /* do we really have to remove addresses as well? */
> -                     TAILQ_FOREACH_SAFE(ia6, &in6_ifaddr, ia_list, ia6_next) 
> {
> -                             if ((ia6->ia6_flags & IN6_IFF_AUTOCONF) == 0)
> -                                     continue;
> +                     TAILQ_FOREACH(ifp, &ifnet, if_list) {
> +                             TAILQ_FOREACH_SAFE(ifa, &ifp->if_addrlist,
> +                                 ifa_list, nifa) {
> +                                     if (ifa->ifa_addr->sa_family !=
> +                                         AF_INET6)
> +                                             continue;
>  
> -                             if (ia6->ia6_ndpr == pr)
> -                                     in6_purgeaddr(&ia6->ia_ifa);
> +                                     ia6 = ifatoia6(ifa);
> +                                     if ((ia6->ia6_flags & IN6_IFF_AUTOCONF)
> +                                         == 0)
> +                                             continue;
> +
> +                                     if (ia6->ia6_ndpr == pr)
> +                                             in6_purgeaddr(&ia6->ia_ifa);
> +                             }
>                       }
>               }
>               /*

Reply via email to