svn commit: r337278 - head/sys/netgraph

Gleb Smirnoff glebius at FreeBSD.org
Fri Aug 3 22:55:59 UTC 2018


Author: glebius
Date: Fri Aug  3 22:55:58 2018
New Revision: 337278
URL: https://svnweb.freebsd.org/changeset/base/337278

Log:
  Use if_tunnel_check_nesting() for ng_iface(4).

Modified:
  head/sys/netgraph/ng_iface.c
  head/sys/netgraph/ng_iface.h

Modified: head/sys/netgraph/ng_iface.c
==============================================================================
--- head/sys/netgraph/ng_iface.c	Fri Aug  3 22:15:58 2018	(r337277)
+++ head/sys/netgraph/ng_iface.c	Fri Aug  3 22:55:58 2018	(r337278)
@@ -344,7 +344,6 @@ static int
 ng_iface_output(struct ifnet *ifp, struct mbuf *m,
 	const struct sockaddr *dst, struct route *ro)
 {
-	struct m_tag *mtag;
 	uint32_t af;
 	int error;
 
@@ -356,22 +355,11 @@ ng_iface_output(struct ifnet *ifp, struct mbuf *m,
 	}
 
 	/* Protect from deadly infinite recursion. */
-	mtag = NULL;
-	while ((mtag = m_tag_locate(m, MTAG_NGIF, MTAG_NGIF_CALLED, mtag))) {
-		if (*(struct ifnet **)(mtag + 1) == ifp) {
-			log(LOG_NOTICE, "Loop detected on %s\n", ifp->if_xname);
-			m_freem(m);
-			return (EDEADLK);
-		}
-	}
-	mtag = m_tag_alloc(MTAG_NGIF, MTAG_NGIF_CALLED, sizeof(struct ifnet *),
-	    M_NOWAIT);
-	if (mtag == NULL) {
+	error = if_tunnel_check_nesting(ifp, m, NGM_IFACE_COOKIE, 1);
+	if (error) {
 		m_freem(m);
-		return (ENOMEM);
+		return (error);
 	}
-	*(struct ifnet **)(mtag + 1) = ifp;
-	m_tag_prepend(m, mtag);
 
 	/* BPF writes need to be handled specially. */
 	if (dst->sa_family == AF_UNSPEC)

Modified: head/sys/netgraph/ng_iface.h
==============================================================================
--- head/sys/netgraph/ng_iface.h	Fri Aug  3 22:15:58 2018	(r337277)
+++ head/sys/netgraph/ng_iface.h	Fri Aug  3 22:55:58 2018	(r337278)
@@ -70,7 +70,4 @@ enum {
 	NGM_IFACE_GET_IFINDEX,
 };
 
-#define	MTAG_NGIF			NGM_IFACE_COOKIE
-#define	MTAG_NGIF_CALLED		0 | MTAG_PERSISTENT
-
 #endif /* _NETGRAPH_NG_IFACE_H_ */


More information about the svn-src-all mailing list