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