Author: bz
Date: Mon Jun  6 16:23:02 2016
New Revision: 301514
URL: https://svnweb.freebsd.org/changeset/base/301514

Log:
  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

Modified:
  head/sys/net/if.c

Modified: head/sys/net/if.c
==============================================================================
--- head/sys/net/if.c   Mon Jun  6 16:10:52 2016        (r301513)
+++ head/sys/net/if.c   Mon Jun  6 16:23:02 2016        (r301514)
@@ -1007,11 +1007,14 @@ if_detach_internal(struct ifnet *ifp, in
                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);
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to