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;