Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/net/npf Introduce an npf_conn_destroy_idx() that can han...



details:   https://anonhg.NetBSD.org/src/rev/73961e1b75dc
branches:  trunk
changeset: 1002560:73961e1b75dc
user:      christos <christos%NetBSD.org@localhost>
date:      Tue Aug 06 10:25:13 2019 +0000

description:
Introduce an npf_conn_destroy_idx() that can handle partially constructed
conn structures.

diffstat:

 sys/net/npf/npf_conn.c |  15 ++++++++++-----
 1 files changed, 10 insertions(+), 5 deletions(-)

diffs (61 lines):

diff -r f4f072339882 -r 73961e1b75dc sys/net/npf/npf_conn.c
--- a/sys/net/npf/npf_conn.c    Tue Aug 06 08:10:27 2019 +0000
+++ b/sys/net/npf/npf_conn.c    Tue Aug 06 10:25:13 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.28 2019/08/06 10:25:13 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -143,6 +143,7 @@
 enum { CONN_TRACKING_OFF, CONN_TRACKING_ON };
 
 static nvlist_t *npf_conn_export(npf_t *, npf_conn_t *);
+static void npf_conn_destroy_idx(npf_t *, npf_conn_t *, unsigned);
 
 /*
  * npf_conn_sys{init,fini}: initialise/destroy connection tracking.
@@ -432,7 +433,7 @@
 
        /* Initialize the protocol state. */
        if (!npf_state_init(npc, &con->c_state)) {
-               npf_conn_destroy(npf, con);
+               npf_conn_destroy_idx(npf, con, idx);
                return NULL;
        }
        KASSERT(npf_iscached(npc, NPC_IP46));
@@ -446,7 +447,7 @@
         */
        if (!npf_conn_conkey(npc, fw, true) ||
            !npf_conn_conkey(npc, bk, false)) {
-               npf_conn_destroy(npf, con);
+               npf_conn_destroy_idx(npf, con, idx);
                return NULL;
        }
        con->c_ifid = global ? nbuf->nb_ifid : 0;
@@ -501,8 +502,12 @@
 {
        const npf_connkey_t *key = npf_conn_getforwkey(con);
        const unsigned alen = NPF_CONNKEY_ALEN(key);
-       const unsigned idx __unused = NPF_CONNCACHE(alen);
+       npf_conn_destroy_idx(npf, con, NPF_CONNCACHE(alen));
+}
 
+static void
+npf_conn_destroy_idx(npf_t *npf, npf_conn_t *con, unsigned idx)
+{
        KASSERT(con->c_refcnt == 0);
 
        if (con->c_nat) {
@@ -894,7 +899,7 @@
        npf_conndb_enqueue(cd, con);
        return 0;
 err:
-       npf_conn_destroy(npf, con);
+       npf_conn_destroy_idx(npf, con, idx);
        return EINVAL;
 }
 



Home | Main Index | Thread Index | Old Index