From beb895083c4794c6134e05dc0fbf0a1a6b919b8e Mon Sep 17 00:00:00 2001 From: "Dr. Stephen Henson" Date: Mon, 21 Mar 2011 14:40:57 +0000 Subject: [PATCH] Free DRBG context in self tests. --- fips/rand/fips_drbg_lib.c | 8 +++++--- fips/rand/fips_drbg_selftest.c | 1 + 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/fips/rand/fips_drbg_lib.c b/fips/rand/fips_drbg_lib.c index 94bc36a31f..a015da1e41 100644 --- a/fips/rand/fips_drbg_lib.c +++ b/fips/rand/fips_drbg_lib.c @@ -112,7 +112,8 @@ DRBG_CTX *FIPS_drbg_new(int type, unsigned int flags) void FIPS_drbg_free(DRBG_CTX *dctx) { - dctx->uninstantiate(dctx); + if (dctx->uninstantiate) + dctx->uninstantiate(dctx); OPENSSL_cleanse(dctx, sizeof(DRBG_CTX)); OPENSSL_free(dctx); } @@ -388,8 +389,9 @@ int FIPS_drbg_uninstantiate(DRBG_CTX *dctx) { int rv; if (!dctx->uninstantiate) - return 1; - rv = dctx->uninstantiate(dctx); + rv = 1; + else + rv = dctx->uninstantiate(dctx); /* Although we'd like to cleanse here we can't because we have to * test the uninstantiate really zeroes the data. */ diff --git a/fips/rand/fips_drbg_selftest.c b/fips/rand/fips_drbg_selftest.c index f580eafb4a..af21971ba0 100644 --- a/fips/rand/fips_drbg_selftest.c +++ b/fips/rand/fips_drbg_selftest.c @@ -1011,6 +1011,7 @@ int FIPS_selftest_drbg(void) if (!fips_drbg_health_check(dctx, td)) break; } + FIPS_drbg_free(dctx); if (td->nid == 0) return 1; return 0; -- 2.25.1