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