Apply by doing: cd /usr/src patch -p0 < 009_ipsec_in_use.patch And then rebuild your kernel. --- sys/net/pfkeyv2.c:1.14 1999/07/06 20:17:52 +++ sys/net/pfkeyv2.c 1999/07/06 20:54:03 @@ -559,8 +559,10 @@ } ret: - bzero(buffer, j + sizeof(struct sadb_msg)); - free(buffer, M_TEMP); + if (buffer != NULL) { + bzero(buffer, j + sizeof(struct sadb_msg)); + free(buffer, M_TEMP); + } return rval; } @@ -1276,7 +1278,6 @@ 0, (struct rtentry **) 0); delete_flow(flow, flow->flow_sa); - ipsec_in_use--; } else if (!replace) { @@ -1294,7 +1295,6 @@ goto ret; } - ipsec_in_use++; sa2->tdb_cur_allocations++; } else @@ -1316,7 +1316,6 @@ delete_flow(flow2, sa2); goto ret; } - ipsec_in_use++; } else if (rt_setgate(rt, rt_key(rt), (struct sockaddr *) &encapgw)) { @@ -1344,7 +1343,6 @@ (struct rtentry **) 0); delete_flow(flow2, flow2->flow_sa); - ipsec_in_use--; } else if (!replace) { @@ -1367,11 +1365,9 @@ delete_flow(flow, sa2); delete_flow(flow2, sa2); - ipsec_in_use--; goto ret; } - ipsec_in_use++; sa2->tdb_cur_allocations++; } else @@ -1400,7 +1396,6 @@ delete_flow(flow2, sa2); goto ret; } - ipsec_in_use++; } else if (rt_setgate(rt, rt_key(rt), (struct sockaddr *) &encapgw)) @@ -1621,7 +1616,7 @@ #if 0 int rval = 0; int i, j; - void *p, *headers[SADB_EXT_MAX+1], *buffer; + void *p, *headers[SADB_EXT_MAX+1], *buffer = NULL; if (!nregistered) { rval = ESRCH; @@ -1727,6 +1722,10 @@ rval = 0; ret: + if (buffer != NULL) { + bzero(buffer, i); + free(buffer, M_TEMP); + } return rval; #endif return 0; @@ -1738,7 +1737,7 @@ int rval = 0; int i; u_int8_t satype; - void *p, *headers[SADB_EXT_MAX+1], *buffer; + void *p, *headers[SADB_EXT_MAX+1], *buffer = NULL; switch (sa->tdb_sproto) { case IPPROTO_AH: @@ -1800,6 +1799,10 @@ rval = 0; ret: + if (buffer != NULL) { + bzero(buffer, i); + free(buffer, M_TEMP); + } return rval; } --- sys/netinet/ip_ipsp.c:1.40 1999/07/06 20:17:52 +++ sys/netinet/ip_ipsp.c 1999/07/06 20:54:03 @@ -417,6 +417,7 @@ MALLOC(flow, struct flow *, sizeof(struct flow), M_TDB, M_WAITOK); bzero(flow, sizeof(struct flow)); + ipsec_in_use++; return flow; } @@ -671,6 +672,7 @@ } } + ipsec_in_use--; FREE(flow, M_TDB); } @@ -722,10 +724,7 @@ (*(tdbp->tdb_xform->xf_zeroize))(tdbp); while (tdbp->tdb_flow) - { delete_flow(tdbp->tdb_flow, tdbp); - ipsec_in_use--; - } /* Cleanup SA-Bindings */ for (tdbpp = TAILQ_FIRST(&tdbp->tdb_bind_in); tdbpp;