--- sys/net/if_stf.c.orig 2017-02-15 13:04:46.104907000 +0700 +++ sys/net/if_stf.c 2017-06-17 18:17:19.395830000 +0700 @@ -360,6 +360,7 @@ stf_encapcheck(const struct mbuf *m, int static int stf_getsrcifa6(struct ifnet *ifp, struct in6_addr *addr, struct in6_addr *mask) { + struct rm_priotracker in_ifa_tracker; struct ifaddr *ia; struct in_ifaddr *ia4; struct in6_ifaddr *ia6; @@ -375,9 +376,11 @@ stf_getsrcifa6(struct ifnet *ifp, struct continue; bcopy(GET_V4(&sin6->sin6_addr), &in, sizeof(in)); + IN_IFADDR_RLOCK(&in_ifa_tracker); LIST_FOREACH(ia4, INADDR_HASH(in.s_addr), ia_hash) if (ia4->ia_addr.sin_addr.s_addr == in.s_addr) break; + IN_IFADDR_RUNLOCK(&in_ifa_tracker); if (ia4 == NULL) continue;