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) {
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"