Widen network epoch coverage in nd6_prefix_onlink() as
in6ifa_ifpforlinklocal() requires the epoch. Reported by: bz Reviewed by: bz
This commit is contained in:
parent
af3a431a84
commit
2105b345fe
@ -1974,6 +1974,7 @@ nd6_prefix_onlink_rtrequest(struct nd_prefix *pr, struct ifaddr *ifa)
|
|||||||
int
|
int
|
||||||
nd6_prefix_onlink(struct nd_prefix *pr)
|
nd6_prefix_onlink(struct nd_prefix *pr)
|
||||||
{
|
{
|
||||||
|
struct epoch_tracker et;
|
||||||
struct ifaddr *ifa;
|
struct ifaddr *ifa;
|
||||||
struct ifnet *ifp = pr->ndpr_ifp;
|
struct ifnet *ifp = pr->ndpr_ifp;
|
||||||
struct nd_prefix *opr;
|
struct nd_prefix *opr;
|
||||||
@ -2018,22 +2019,20 @@ nd6_prefix_onlink(struct nd_prefix *pr)
|
|||||||
* We prefer link-local addresses as the associated interface address.
|
* We prefer link-local addresses as the associated interface address.
|
||||||
*/
|
*/
|
||||||
/* search for a link-local addr */
|
/* search for a link-local addr */
|
||||||
|
NET_EPOCH_ENTER(et);
|
||||||
ifa = (struct ifaddr *)in6ifa_ifpforlinklocal(ifp,
|
ifa = (struct ifaddr *)in6ifa_ifpforlinklocal(ifp,
|
||||||
IN6_IFF_NOTREADY | IN6_IFF_ANYCAST);
|
IN6_IFF_NOTREADY | IN6_IFF_ANYCAST);
|
||||||
if (ifa == NULL) {
|
if (ifa == NULL) {
|
||||||
struct epoch_tracker et;
|
|
||||||
|
|
||||||
/* XXX: freebsd does not have ifa_ifwithaf */
|
/* XXX: freebsd does not have ifa_ifwithaf */
|
||||||
NET_EPOCH_ENTER(et);
|
|
||||||
CK_STAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
|
CK_STAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
|
||||||
if (ifa->ifa_addr->sa_family == AF_INET6) {
|
if (ifa->ifa_addr->sa_family == AF_INET6) {
|
||||||
ifa_ref(ifa);
|
ifa_ref(ifa);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
NET_EPOCH_EXIT(et);
|
|
||||||
/* should we care about ia6_flags? */
|
/* should we care about ia6_flags? */
|
||||||
}
|
}
|
||||||
|
NET_EPOCH_EXIT(et);
|
||||||
if (ifa == NULL) {
|
if (ifa == NULL) {
|
||||||
/*
|
/*
|
||||||
* This can still happen, when, for example, we receive an RA
|
* This can still happen, when, for example, we receive an RA
|
||||||
|
Loading…
x
Reference in New Issue
Block a user