Author: bz
Date: Wed Jun 17 20:58:37 2020
New Revision: 362288
URL: https://svnweb.freebsd.org/changeset/base/362288

Log:
  The call into ifa_ifwithaddr() needs to be epoch protected; ortherwise
  we'll panic on an assertion.
  While here, leave a comment that the ifp was never protected and stable
  (as glebius pointed out) and this needs to be fixed properly.
  
  Discovered while working on:  PR 246629
  Reviewed by:  glebius
  MFC after:    4 days
  Sponsored by: Rubicon Communications, LLC (d/b/a "Netgate")

Modified:
  head/sys/netinet/ip_mroute.c

Modified: head/sys/netinet/ip_mroute.c
==============================================================================
--- head/sys/netinet/ip_mroute.c        Wed Jun 17 19:57:59 2020        
(r362287)
+++ head/sys/netinet/ip_mroute.c        Wed Jun 17 20:58:37 2020        
(r362288)
@@ -879,13 +879,19 @@ add_vif(struct vifctl *vifcp)
         */
        ifp = NULL;
     } else {
+       struct epoch_tracker et;
+
        sin.sin_addr = vifcp->vifc_lcl_addr;
+       NET_EPOCH_ENTER(et);
        ifa = ifa_ifwithaddr((struct sockaddr *)&sin);
        if (ifa == NULL) {
+           NET_EPOCH_EXIT(et);
            VIF_UNLOCK();
            return EADDRNOTAVAIL;
        }
        ifp = ifa->ifa_ifp;
+       /* XXX FIXME we need to take a ref on ifp and cleanup properly! */
+       NET_EPOCH_EXIT(et);
     }
 
     if ((vifcp->vifc_flags & VIFF_TUNNEL) != 0) {
_______________________________________________
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