Use correct locking when traversing interface address list.

Reviewed by:	bz
This commit is contained in:
Gleb Smirnoff 2012-01-04 07:01:23 +00:00
parent 450a186c06
commit 1331bbc33f
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=229465

View File

@ -2244,9 +2244,7 @@ in6_ifawithifp(struct ifnet *ifp, struct in6_addr *dst)
IF_ADDR_UNLOCK(ifp);
return (besta);
}
IF_ADDR_UNLOCK(ifp);
IN6_IFADDR_RLOCK();
TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
if (ifa->ifa_addr->sa_family != AF_INET6)
continue;
@ -2264,10 +2262,10 @@ in6_ifawithifp(struct ifnet *ifp, struct in6_addr *dst)
if (ifa != NULL)
ifa_ref(ifa);
IN6_IFADDR_RUNLOCK();
IF_ADDR_UNLOCK(ifp);
return (struct in6_ifaddr *)ifa;
}
IN6_IFADDR_RUNLOCK();
IF_ADDR_UNLOCK(ifp);
/* use the last-resort values, that are, deprecated addresses */
if (dep[0])