Split a part of tdb_delete() into tdb_unlink() so that we can remove
authorpatrick <patrick@openbsd.org>
Mon, 26 Jun 2017 09:08:00 +0000 (09:08 +0000)
committerpatrick <patrick@openbsd.org>
Mon, 26 Jun 2017 09:08:00 +0000 (09:08 +0000)
a TDB from the hash table without actually free()ing it.  That way we
can modify the TDB and then put it back in using puttdb().

ok claudio@

sys/netinet/ip_ipsp.c
sys/netinet/ip_ipsp.h

index 39daa18..085557c 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ip_ipsp.c,v 1.224 2017/05/18 10:56:45 bluhm Exp $     */
+/*     $OpenBSD: ip_ipsp.c,v 1.225 2017/06/26 09:08:00 patrick Exp $   */
 /*
  * The authors of this code are John Ioannidis (ji@tla.org),
  * Angelos D. Keromytis (kermit@csd.uch.gr),
@@ -714,7 +714,7 @@ puttdb(struct tdb *tdbp)
 }
 
 void
-tdb_delete(struct tdb *tdbp)
+tdb_unlink(struct tdb *tdbp)
 {
        struct tdb *tdbpp;
        u_int32_t hashval;
@@ -775,10 +775,18 @@ tdb_delete(struct tdb *tdbp)
        }
 
        tdbp->tdb_snext = NULL;
-       tdb_free(tdbp);
        tdb_count--;
 }
 
+void
+tdb_delete(struct tdb *tdbp)
+{
+       NET_ASSERT_LOCKED();
+
+       tdb_unlink(tdbp);
+       tdb_free(tdbp);
+}
+
 /*
  * Allocate a TDB and initialize a few basic fields.
  */
index 43bf0f8..df145de 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ip_ipsp.h,v 1.182 2017/05/22 22:23:11 bluhm Exp $     */
+/*     $OpenBSD: ip_ipsp.h,v 1.183 2017/06/26 09:08:00 patrick Exp $   */
 /*
  * The authors of this code are John Ioannidis (ji@tla.org),
  * Angelos D. Keromytis (kermit@csd.uch.gr),
@@ -468,6 +468,7 @@ void        tdb_delete(struct tdb *);
 struct tdb *tdb_alloc(u_int);
 void   tdb_free(struct tdb *);
 int    tdb_init(struct tdb *, u_int16_t, struct ipsecinit *);
+void   tdb_unlink(struct tdb *);
 int    tdb_walk(u_int, int (*)(struct tdb *, void *, int), void *);
 
 /* XF_IP4 */