From 08c2ef1fa5c0462c63a899b9a8619fed09eed71c Mon Sep 17 00:00:00 2001 From: bz Date: Mon, 6 Jun 2016 16:23:02 +0000 Subject: [PATCH] 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 --- sys/net/if.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sys/net/if.c b/sys/net/if.c index bd505e291c84..a9f2baf3e24e 100644 --- a/sys/net/if.c +++ b/sys/net/if.c @@ -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);