Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 17 Jun 2020 20:58:38 +0000 (UTC)
From:      "Bjoern A. Zeeb" <bz@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r362288 - head/sys/netinet
Message-ID:  <202006172058.05HKwcm7068854@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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) {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202006172058.05HKwcm7068854>