ok? Index: crypto/cryptosoft.c =================================================================== RCS file: /cvs/src/sys/crypto/cryptosoft.c,v retrieving revision 1.84 diff -u -p -r1.84 cryptosoft.c --- crypto/cryptosoft.c 31 May 2018 19:40:58 -0000 1.84 +++ crypto/cryptosoft.c 29 Nov 2018 19:05:36 -0000 @@ -688,7 +688,7 @@ swcr_compdec(struct cryptodesc *crd, str if (crd->crd_flags & CRD_F_COMP) { if (result > crd->crd_len) { /* Compression was useless, we lost time */ - free(out, M_CRYPTO_DATA, 0); + free(out, M_CRYPTO_DATA, result); return 0; } } @@ -719,7 +719,7 @@ swcr_compdec(struct cryptodesc *crd, str } } } - free(out, M_CRYPTO_DATA, 0); + free(out, M_CRYPTO_DATA, result); return 0; } Index: crypto/xform_ipcomp.c =================================================================== RCS file: /cvs/src/sys/crypto/xform_ipcomp.c,v retrieving revision 1.7 diff -u -p -r1.7 xform_ipcomp.c --- crypto/xform_ipcomp.c 16 Mar 2015 20:26:24 -0000 1.7 +++ crypto/xform_ipcomp.c 29 Nov 2018 19:07:26 -0000 @@ -141,13 +141,13 @@ deflate_global(u_int8_t *data, u_int32_t if (count > buf[j].size) { bcopy(buf[j].out, *out, buf[j].size); *out += buf[j].size; - free(buf[j].out, M_CRYPTO_DATA, 0); + free(buf[j].out, M_CRYPTO_DATA, buf[j].size); count -= buf[j].size; } else { /* it should be the last buffer */ bcopy(buf[j].out, *out, count); *out += count; - free(buf[j].out, M_CRYPTO_DATA, 0); + free(buf[j].out, M_CRYPTO_DATA, buf[j].size); count = 0; } } @@ -157,7 +157,7 @@ deflate_global(u_int8_t *data, u_int32_t bad: *out = NULL; for (j = 0; buf[j].flag != 0; j++) - free(buf[j].out, M_CRYPTO_DATA, 0); + free(buf[j].out, M_CRYPTO_DATA, buf[j].size); if (decomp) inflateEnd(&zbuf); else