Fix memory leak in do_rand_drbg_init()
authorDr. Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
Tue, 16 Jan 2018 07:03:37 +0000 (08:03 +0100)
committerBenjamin Kaduk <kaduk@mit.edu>
Tue, 16 Jan 2018 14:38:13 +0000 (08:38 -0600)
Fixes #5076

Since do_rand_drbg_init() allocates three locks, it needs to ensure
that OPENSSL_init_crypto() is called, otherwise these resources are
not cleaned up properly.

Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Ben Kaduk <kaduk@mit.edu>
(Merged from https://github.com/openssl/openssl/pull/5083)

crypto/rand/drbg_lib.c

index ff7f6546d7944040203bfd37dfd001617518947a..5d3d0f2fd718fe92ae6e7ae9a8f8afd43ae1ea27 100644 (file)
@@ -708,6 +708,13 @@ err:
  */
 DEFINE_RUN_ONCE_STATIC(do_rand_drbg_init)
 {
+    /*
+     * ensure that libcrypto is initialized, otherwise the
+     * DRBG locks are not cleaned up properly
+     */
+    if (!OPENSSL_init_crypto(0, NULL))
+        return 0;
+
     drbg_master = drbg_setup("drbg_master", NULL);
     drbg_public = drbg_setup("drbg_public", drbg_master);
     drbg_private = drbg_setup("drbg_private", drbg_master);