Fix drbg_ossl_ctx_free() and drbg_nonce_ossl_ctx_free() to handle NULL
authorRichard Levitte <levitte@openssl.org>
Wed, 21 Aug 2019 08:12:05 +0000 (10:12 +0200)
committerRichard Levitte <levitte@openssl.org>
Wed, 21 Aug 2019 23:50:30 +0000 (01:50 +0200)
If these were passed NULL, the crashed with a SIGSEGV, when they
should do like all other freeing functions and become a no-op.

Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/9650)

crypto/rand/drbg_lib.c

index 825e90d..f8b58d7 100644 (file)
@@ -191,6 +191,9 @@ static void drbg_ossl_ctx_free(void *vdgbl)
 {
     DRBG_GLOBAL *dgbl = vdgbl;
 
+    if (dgbl == NULL)
+        return;
+
     RAND_DRBG_free(dgbl->master_drbg);
     CRYPTO_THREAD_cleanup_local(&dgbl->private_drbg);
     CRYPTO_THREAD_cleanup_local(&dgbl->public_drbg);
@@ -230,6 +233,9 @@ static void drbg_nonce_ossl_ctx_free(void *vdngbl)
 {
     DRBG_NONCE_GLOBAL *dngbl = vdngbl;
 
+    if (dngbl == NULL)
+        return;
+
     CRYPTO_THREAD_lock_free(dngbl->rand_nonce_lock);
 
     OPENSSL_free(dngbl);