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:
bz 2016-06-06 16:23:02 +00:00
parent c7d8c5362d
commit 08c2ef1fa5

View File

@ -1007,11 +1007,14 @@ if_detach_internal(struct ifnet *ifp, int vmove, struct if_clone **ifcp)
ifp->if_addr = NULL;
/* We can now free link ifaddr. */
IF_ADDR_WLOCK(ifp);
if (!TAILQ_EMPTY(&ifp->if_addrhead)) {
ifa = TAILQ_FIRST(&ifp->if_addrhead);
TAILQ_REMOVE(&ifp->if_addrhead, ifa, ifa_link);
IF_ADDR_WUNLOCK(ifp);
ifa_free(ifa);
}
} else
IF_ADDR_WUNLOCK(ifp);
}
rt_flushifroutes(ifp);