Similarly to r301505 protect the removal of the ifa from the if_addrhead
by a lock (as well as the check that the list is not empty). Obtained from: projects/vnet MFC after: 2 weeks Sponsored by: The FreeBSD Foundation
This commit is contained in:
parent
c7d8c5362d
commit
08c2ef1fa5
@ -1007,11 +1007,14 @@ if_detach_internal(struct ifnet *ifp, int vmove, struct if_clone **ifcp)
|
|||||||
ifp->if_addr = NULL;
|
ifp->if_addr = NULL;
|
||||||
|
|
||||||
/* We can now free link ifaddr. */
|
/* We can now free link ifaddr. */
|
||||||
|
IF_ADDR_WLOCK(ifp);
|
||||||
if (!TAILQ_EMPTY(&ifp->if_addrhead)) {
|
if (!TAILQ_EMPTY(&ifp->if_addrhead)) {
|
||||||
ifa = TAILQ_FIRST(&ifp->if_addrhead);
|
ifa = TAILQ_FIRST(&ifp->if_addrhead);
|
||||||
TAILQ_REMOVE(&ifp->if_addrhead, ifa, ifa_link);
|
TAILQ_REMOVE(&ifp->if_addrhead, ifa, ifa_link);
|
||||||
|
IF_ADDR_WUNLOCK(ifp);
|
||||||
ifa_free(ifa);
|
ifa_free(ifa);
|
||||||
}
|
} else
|
||||||
|
IF_ADDR_WUNLOCK(ifp);
|
||||||
}
|
}
|
||||||
|
|
||||||
rt_flushifroutes(ifp);
|
rt_flushifroutes(ifp);
|
||||||
|
Loading…
Reference in New Issue
Block a user