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