Hi,

ip_output() and ip6_output() should be MP safe when called with
NULL options.

ok?

bluhm

Index: netinet/ip_input.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/ip_input.c,v
retrieving revision 1.385
diff -u -p -r1.385 ip_input.c
--- netinet/ip_input.c  18 May 2023 09:59:43 -0000      1.385
+++ netinet/ip_input.c  5 Sep 2023 11:48:25 -0000
@@ -1851,7 +1851,7 @@ ip_send_do_dispatch(void *xmq, int flags
        if (ml_empty(&ml))
                return;
 
-       NET_LOCK();
+       NET_LOCK_SHARED();
        while ((m = ml_dequeue(&ml)) != NULL) {
                u_int32_t ipsecflowinfo = 0;
 
@@ -1862,7 +1862,7 @@ ip_send_do_dispatch(void *xmq, int flags
                }
                ip_output(m, NULL, NULL, flags, NULL, NULL, ipsecflowinfo);
        }
-       NET_UNLOCK();
+       NET_UNLOCK_SHARED();
 }
 
 void
Index: netinet6/ip6_input.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/netinet6/ip6_input.c,v
retrieving revision 1.254
diff -u -p -r1.254 ip6_input.c
--- netinet6/ip6_input.c        21 Aug 2022 14:15:55 -0000      1.254
+++ netinet6/ip6_input.c        5 Sep 2023 11:48:44 -0000
@@ -1572,11 +1572,11 @@ ip6_send_dispatch(void *xmq)
        if (ml_empty(&ml))
                return;
 
-       NET_LOCK();
+       NET_LOCK_SHARED();
        while ((m = ml_dequeue(&ml)) != NULL) {
                ip6_output(m, NULL, NULL, 0, NULL, NULL);
        }
-       NET_UNLOCK();
+       NET_UNLOCK_SHARED();
 }
 
 void

Reply via email to