Exploit r301213 to fix in6 ifaddr locking in pfxlist_onlink_check().
Reviewed by: ae, hrs MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D6639
This commit is contained in:
parent
0973ca723c
commit
1b28988b44
@ -46,6 +46,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include <sys/kernel.h>
|
||||
#include <sys/lock.h>
|
||||
#include <sys/errno.h>
|
||||
#include <sys/rmlock.h>
|
||||
#include <sys/rwlock.h>
|
||||
#include <sys/syslog.h>
|
||||
#include <sys/queue.h>
|
||||
@ -1437,12 +1438,13 @@ find_pfxlist_reachable_router(struct nd_prefix *pr)
|
||||
* is no router around us.
|
||||
*/
|
||||
void
|
||||
pfxlist_onlink_check()
|
||||
pfxlist_onlink_check(void)
|
||||
{
|
||||
struct nd_prefix *pr;
|
||||
struct in6_ifaddr *ifa;
|
||||
struct nd_defrouter *dr;
|
||||
struct nd_pfxrouter *pfxrtr = NULL;
|
||||
struct rm_priotracker in6_ifa_tracker;
|
||||
|
||||
/*
|
||||
* Check if there is a prefix that has a reachable advertising
|
||||
@ -1573,9 +1575,8 @@ pfxlist_onlink_check()
|
||||
* detached. Note, however, that a manually configured address should
|
||||
* always be attached.
|
||||
* The precise detection logic is same as the one for prefixes.
|
||||
*
|
||||
* XXXRW: in6_ifaddrhead locking.
|
||||
*/
|
||||
IN6_IFADDR_RLOCK(&in6_ifa_tracker);
|
||||
TAILQ_FOREACH(ifa, &V_in6_ifaddrhead, ia_link) {
|
||||
if (!(ifa->ia6_flags & IN6_IFF_AUTOCONF))
|
||||
continue;
|
||||
@ -1610,8 +1611,7 @@ pfxlist_onlink_check()
|
||||
ifa->ia6_flags |= IN6_IFF_DETACHED;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
TAILQ_FOREACH(ifa, &V_in6_ifaddrhead, ia_link) {
|
||||
if ((ifa->ia6_flags & IN6_IFF_AUTOCONF) == 0)
|
||||
continue;
|
||||
@ -1624,6 +1624,7 @@ pfxlist_onlink_check()
|
||||
}
|
||||
}
|
||||
}
|
||||
IN6_IFADDR_RUNLOCK(&in6_ifa_tracker);
|
||||
}
|
||||
|
||||
static int
|
||||
|
Loading…
Reference in New Issue
Block a user