Index: cryptosoft.c =================================================================== RCS file: /usr/repo/src/sys/opencrypto/cryptosoft.c,v retrieving revision 1.9 diff -u -p -r1.9 cryptosoft.c --- cryptosoft.c 11 Mar 2005 12:37:06 -0000 1.9 +++ cryptosoft.c 12 Mar 2006 20:43:21 -0000 @@ -70,6 +70,7 @@ u_int8_t hmac_opad_buffer[64] = { struct swcr_data **swcr_sessions = NULL; u_int32_t swcr_sesnum = 0; +u_int32_t swcr_sesactive = 0; int32_t swcr_id = -1; #define COPYBACK(x, a, b, c, d) \ @@ -647,6 +648,7 @@ swcr_newsession(void *arg, u_int32_t *si swcr_freesession(NULL, i); return ENOBUFS; } + swcr_sesactive++; switch (cri->cri_alg) { case CRYPTO_DES_CBC: @@ -889,6 +891,10 @@ swcr_freesession(void *arg, u_int64_t ti FREE(swd, M_CRYPTO_DATA); } + if (--swcr_sesactive == 0) { + FREE(swcr_sessions, M_CRYPTO_DATA); + swcr_sessions = NULL; + } return 0; }