Use ip{,6}_send() instead of ip{,6}_output() to prevent a recursion.
authormpi <mpi@openbsd.org>
Tue, 9 Jan 2018 10:08:01 +0000 (10:08 +0000)
committermpi <mpi@openbsd.org>
Tue, 9 Jan 2018 10:08:01 +0000 (10:08 +0000)
if_start() is a boundary between the network stack and drivers.  The
states it modifies must be protected by the driver, so we should not
require the NET_LOCK() there.

ok bluhm@, visa@

sys/net/if_gif.c

index a9f0371..3ef20bd 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: if_gif.c,v 1.105 2017/11/20 10:35:24 mpi Exp $        */
+/*     $OpenBSD: if_gif.c,v 1.106 2018/01/09 10:08:01 mpi Exp $        */
 /*     $KAME: if_gif.c,v 1.43 2001/02/20 08:51:07 itojun Exp $ */
 
 /*
@@ -231,17 +231,11 @@ gif_start(struct ifnet *ifp)
 
                switch (sc->gif_psrc->sa_family) {
                case AF_INET:
-                       ip_output(m, NULL, NULL, 0, NULL, NULL, 0);
+                       ip_send(m);
                        break;
 #ifdef INET6
                case AF_INET6:
-                       /*
-                        * force fragmentation to minimum MTU, to avoid path
-                        * MTU discovery. It is too painful to ask for resend
-                        * of inner packet, to achieve path MTU discovery for
-                        * encapsulated packets.
-                        */
-                       ip6_output(m, 0, NULL, IPV6_MINMTU, 0, NULL);
+                       ip6_send(m);
                        break;
 #endif
                default: