in6_ifattach_linklocal: handle immediate removal of the new LLA
If another thread immediately removes the link-local address added by in6_update_ifa(), in6ifa_ifpforlinklocal() can return NULL, so the following assertion (or dereference) is wrong. Remove the assertion, and handle NULL somewhat better than panicking. This matches all of the other callers of in6_update_ifa(). PR: 219250 Reviewed by: bz, dab (both an earlier version) MFC after: 1 week Sponsored by: Dell EMC Isilon Differential Revision: https://reviews.freebsd.org/D17898
This commit is contained in:
parent
37761e2eda
commit
68b840878c
@ -481,9 +481,16 @@ in6_ifattach_linklocal(struct ifnet *ifp, struct ifnet *altifp)
|
||||
return (-1);
|
||||
}
|
||||
|
||||
ia = in6ifa_ifpforlinklocal(ifp, 0); /* ia must not be NULL */
|
||||
KASSERT(ia != NULL, ("%s: ia == NULL, ifp=%p", __func__, ifp));
|
||||
|
||||
ia = in6ifa_ifpforlinklocal(ifp, 0);
|
||||
if (ia == NULL) {
|
||||
/*
|
||||
* Another thread removed the address that we just added.
|
||||
* This should be rare, but it happens.
|
||||
*/
|
||||
nd6log((LOG_NOTICE, "%s: %s: new link-local address "
|
||||
"disappeared\n", __func__, if_name(ifp)));
|
||||
return (-1);
|
||||
}
|
||||
ifa_free(&ia->ia_ifa);
|
||||
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user