svn commit: r362288 - head/sys/netinet

Bjoern A. Zeeb bz at FreeBSD.org
Wed Jun 17 20:58:38 UTC 2020


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) {


More information about the svn-src-head mailing list