Module Name:    src
Committed By:   riastradh
Date:           Thu Aug 27 18:50:25 UTC 2020

Modified Files:
        src/sys/net/npf: npf.c npf_impl.h npf_portmap.c
        src/usr.sbin/npf/npftest/libnpftest: npf_test_subr.c

Log Message:
npf: Make sure to initialize portmap_lock only once.

PR kern/55586


To generate a diff of this commit:
cvs rdiff -u -r1.43 -r1.44 src/sys/net/npf/npf.c
cvs rdiff -u -r1.81 -r1.82 src/sys/net/npf/npf_impl.h
cvs rdiff -u -r1.5 -r1.6 src/sys/net/npf/npf_portmap.c
cvs rdiff -u -r1.18 -r1.19 \
    src/usr.sbin/npf/npftest/libnpftest/npf_test_subr.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/net/npf/npf.c
diff -u src/sys/net/npf/npf.c:1.43 src/sys/net/npf/npf.c:1.44
--- src/sys/net/npf/npf.c:1.43	Sat May 30 14:16:56 2020
+++ src/sys/net/npf/npf.c	Thu Aug 27 18:50:25 2020
@@ -33,7 +33,7 @@
 
 #ifdef _KERNEL
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: npf.c,v 1.43 2020/05/30 14:16:56 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: npf.c,v 1.44 2020/08/27 18:50:25 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -52,16 +52,20 @@ static __read_mostly npf_t *	npf_kernel_
 __dso_public int
 npfk_sysinit(unsigned nworkers)
 {
+
 	npf_bpf_sysinit();
 	npf_tableset_sysinit();
 	npf_nat_sysinit();
+	npf_portmap_sysinit();
 	return npf_worker_sysinit(nworkers);
 }
 
 __dso_public void
 npfk_sysfini(void)
 {
+
 	npf_worker_sysfini();
+	npf_portmap_sysfini();
 	npf_nat_sysfini();
 	npf_tableset_sysfini();
 	npf_bpf_sysfini();

Index: src/sys/net/npf/npf_impl.h
diff -u src/sys/net/npf/npf_impl.h:1.81 src/sys/net/npf/npf_impl.h:1.82
--- src/sys/net/npf/npf_impl.h:1.81	Sat May 30 14:16:56 2020
+++ src/sys/net/npf/npf_impl.h	Thu Aug 27 18:50:25 2020
@@ -472,6 +472,9 @@ bool		npf_state_tcp(npf_cache_t *, npf_s
 int		npf_state_tcp_timeout(npf_t *, const npf_state_t *);
 
 /* Portmap. */
+void		npf_portmap_sysinit(void);
+void		npf_portmap_sysfini(void);
+
 void		npf_portmap_init(npf_t *);
 void		npf_portmap_fini(npf_t *);
 

Index: src/sys/net/npf/npf_portmap.c
diff -u src/sys/net/npf/npf_portmap.c:1.5 src/sys/net/npf/npf_portmap.c:1.6
--- src/sys/net/npf/npf_portmap.c:1.5	Sat May 30 14:16:56 2020
+++ src/sys/net/npf/npf_portmap.c	Thu Aug 27 18:50:25 2020
@@ -35,7 +35,7 @@
 
 #ifdef _KERNEL
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: npf_portmap.c,v 1.5 2020/05/30 14:16:56 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: npf_portmap.c,v 1.6 2020/08/27 18:50:25 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -109,6 +109,22 @@ struct npf_portmap {
 static kmutex_t			portmap_lock;
 
 void
+npf_portmap_sysinit(void)
+{
+
+	mutex_init(&portmap_lock, MUTEX_DEFAULT, IPL_SOFTNET);
+	__insn_barrier();
+}
+
+void
+npf_portmap_sysfini(void)
+{
+
+	mutex_destroy(&portmap_lock);
+	__insn_barrier();
+}
+
+void
 npf_portmap_init(npf_t *npf)
 {
 	npf_portmap_t *pm = npf_portmap_create(
@@ -127,16 +143,16 @@ npf_portmap_init(npf_t *npf)
 			.min = 1024, .max = 65535
 		}
 	};
+
 	npf_param_register(npf, param_map, __arraycount(param_map));
-	mutex_init(&portmap_lock, MUTEX_DEFAULT, IPL_SOFTNET);
 	npf->portmap = pm;
 }
 
 void
 npf_portmap_fini(npf_t *npf)
 {
+
 	npf_portmap_destroy(npf->portmap);
-	mutex_destroy(&portmap_lock);
 	npf->portmap = NULL; // diagnostic
 }
 

Index: src/usr.sbin/npf/npftest/libnpftest/npf_test_subr.c
diff -u src/usr.sbin/npf/npftest/libnpftest/npf_test_subr.c:1.18 src/usr.sbin/npf/npftest/libnpftest/npf_test_subr.c:1.19
--- src/usr.sbin/npf/npftest/libnpftest/npf_test_subr.c:1.18	Sat May 30 21:00:31 2020
+++ src/usr.sbin/npf/npftest/libnpftest/npf_test_subr.c	Thu Aug 27 18:50:25 2020
@@ -71,7 +71,6 @@ npf_test_init(int (*pton_func)(int, cons
 		npf_worker_sysfini();
 	}
 #endif
-	npfk_sysinit(0);
 	npf = npfk_create(0, &npftest_mbufops, &npftest_ifops, NULL);
 	npfk_thread_register(npf);
 	npf_setkernctx(npf);
@@ -88,9 +87,9 @@ void
 npf_test_fini(void)
 {
 	npf_t *npf = npf_getkernctx();
+
 	npfk_thread_unregister(npf);
 	npfk_destroy(npf);
-	npfk_sysfini();
 }
 
 int

Reply via email to