summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorkmacy <kmacy@FreeBSD.org>2008-12-24 01:08:18 +0000
committerkmacy <kmacy@FreeBSD.org>2008-12-24 01:08:18 +0000
commit7c3c2fbe0c913f539c862fcb7beaf9f1d78b6489 (patch)
treefa5b587a81b233537fda190401159e243450577d /sys
parent110365dd9ef7c4b89e7d3dc7aaa7ac66c1347593 (diff)
downloadFreeBSD-src-7c3c2fbe0c913f539c862fcb7beaf9f1d78b6489.zip
FreeBSD-src-7c3c2fbe0c913f539c862fcb7beaf9f1d78b6489.tar.gz
avoid lock recursion by deferring the link check until after LLE lock is dropped
Diffstat (limited to 'sys')
-rw-r--r--sys/netinet6/nd6_nbr.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/netinet6/nd6_nbr.c b/sys/netinet6/nd6_nbr.c
index c1cb423..84e415a 100644
--- a/sys/netinet6/nd6_nbr.c
+++ b/sys/netinet6/nd6_nbr.c
@@ -603,6 +603,7 @@ nd6_na_input(struct mbuf *m, int off, int icmp6len)
int is_override;
char *lladdr = NULL;
int lladdrlen = 0;
+ int checklink = 0;
struct ifaddr *ifa;
struct llentry *ln = NULL;
union nd_opts ndopts;
@@ -739,7 +740,7 @@ nd6_na_input(struct mbuf *m, int off, int icmp6len)
* non-reachable to probably reachable, and might
* affect the status of associated prefixes..
*/
- pfxlist_onlink_check();
+ checklink = 1;
}
} else {
int llchange;
@@ -886,6 +887,9 @@ nd6_na_input(struct mbuf *m, int off, int icmp6len)
if (chain)
nd6_output_flush(ifp, ifp, chain, &sin6, NULL);
}
+ if (checklink)
+ pfxlist_onlink_check();
+
m_freem(m);
return;
OpenPOWER on IntegriCloud