Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/netbsd-9]: src/sys/net/npf Pull up following revision(s) (requested by r...
details: https://anonhg.NetBSD.org/src/rev/ce1eed8ea992
branches: netbsd-9
changeset: 843018:ce1eed8ea992
user: martin <martin%NetBSD.org@localhost>
date: Wed Aug 07 08:28:37 2019 +0000
description:
Pull up following revision(s) (requested by rmind in ticket #25):
sys/net/npf/npf_conn.h: revision 1.17
sys/net/npf/npf.c: revision 1.39
sys/net/npf/npf_conn.c: revision 1.28
sys/net/npf/npf_conn.c: revision 1.29
Introduce an npf_conn_destroy_idx() that can handle partially constructed
conn structures.
- npf_conn_init(): fix a race when initialising the G/C thread.
- Fix a bug when partially initialised connection is destroyed on error.
(from rmind@)
diffstat:
sys/net/npf/npf.c | 8 ++++++--
sys/net/npf/npf_conn.c | 14 +++++---------
sys/net/npf/npf_conn.h | 5 +++--
3 files changed, 14 insertions(+), 13 deletions(-)
diffs (112 lines):
diff -r ff41e1987726 -r ce1eed8ea992 sys/net/npf/npf.c
--- a/sys/net/npf/npf.c Wed Aug 07 08:25:32 2019 +0000
+++ b/sys/net/npf/npf.c Wed Aug 07 08:28:37 2019 +0000
@@ -33,7 +33,7 @@
#ifdef _KERNEL
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: npf.c,v 1.38 2019/07/23 00:52:01 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: npf.c,v 1.38.2.1 2019/08/07 08:28:37 martin Exp $");
#include <sys/param.h>
#include <sys/types.h>
@@ -79,13 +79,17 @@
npf_param_init(npf);
npf_state_sysinit(npf);
npf_ifmap_init(npf, ifops);
- npf_conn_init(npf, flags);
+ npf_conn_init(npf);
npf_portmap_init(npf);
npf_alg_init(npf);
npf_ext_init(npf);
/* Load an empty configuration. */
npf_config_init(npf);
+
+ if ((flags & NPF_NO_GC) == 0) {
+ npf_worker_register(npf, npf_conn_worker);
+ }
return npf;
}
diff -r ff41e1987726 -r ce1eed8ea992 sys/net/npf/npf_conn.c
--- a/sys/net/npf/npf_conn.c Wed Aug 07 08:25:32 2019 +0000
+++ b/sys/net/npf/npf_conn.c Wed Aug 07 08:28:37 2019 +0000
@@ -107,7 +107,7 @@
#ifdef _KERNEL
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: npf_conn.c,v 1.27 2019/07/23 00:52:01 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: npf_conn.c,v 1.27.2.1 2019/08/07 08:28:37 martin Exp $");
#include <sys/param.h>
#include <sys/types.h>
@@ -149,7 +149,7 @@
*/
void
-npf_conn_init(npf_t *npf, int flags)
+npf_conn_init(npf_t *npf)
{
npf->conn_cache[0] = pool_cache_init(
offsetof(npf_conn_t, c_keys[NPF_CONNKEY_V4WORDS * 2]),
@@ -161,10 +161,6 @@
mutex_init(&npf->conn_lock, MUTEX_DEFAULT, IPL_NONE);
npf->conn_tracking = CONN_TRACKING_OFF;
npf->conn_db = npf_conndb_create();
-
- if ((flags & NPF_NO_GC) == 0) {
- npf_worker_register(npf, npf_conn_worker);
- }
npf_conndb_sysinit(npf);
}
@@ -429,6 +425,7 @@
con->c_proto = npc->npc_proto;
CTASSERT(sizeof(con->c_proto) >= sizeof(npc->npc_proto));
+ con->c_alen = alen;
/* Initialize the protocol state. */
if (!npf_state_init(npc, &con->c_state)) {
@@ -499,9 +496,7 @@
void
npf_conn_destroy(npf_t *npf, npf_conn_t *con)
{
- const npf_connkey_t *key = npf_conn_getforwkey(con);
- const unsigned alen = NPF_CONNKEY_ALEN(key);
- const unsigned idx __unused = NPF_CONNCACHE(alen);
+ const unsigned idx __unused = NPF_CONNCACHE(con->c_alen);
KASSERT(con->c_refcnt == 0);
@@ -794,6 +789,7 @@
fw = npf_conn_getforwkey(con);
alen = NPF_CONNKEY_ALEN(fw);
+ KASSERT(alen == con->c_alen);
bk = npf_conn_getbackkey(con, alen);
kdict = npf_connkey_export(fw);
diff -r ff41e1987726 -r ce1eed8ea992 sys/net/npf/npf_conn.h
--- a/sys/net/npf/npf_conn.h Wed Aug 07 08:25:32 2019 +0000
+++ b/sys/net/npf/npf_conn.h Wed Aug 07 08:28:37 2019 +0000
@@ -50,7 +50,8 @@
* Protocol, address length, the interface ID (if zero,
* then the state is global) and connection flags.
*/
- unsigned c_proto;
+ uint16_t c_proto;
+ uint16_t c_alen;
unsigned c_ifid;
unsigned c_flags;
@@ -123,7 +124,7 @@
/*
* Connection tracking interface.
*/
-void npf_conn_init(npf_t *, int);
+void npf_conn_init(npf_t *);
void npf_conn_fini(npf_t *);
void npf_conn_tracking(npf_t *, bool);
void npf_conn_load(npf_t *, npf_conndb_t *, bool);
Home |
Main Index |
Thread Index |
Old Index