drbg: add fork id to additional data on UNIX systems
authorDr. Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
Thu, 30 May 2019 16:52:39 +0000 (18:52 +0200)
committerMatt Caswell <matt@openssl.org>
Mon, 9 Sep 2019 16:09:06 +0000 (17:09 +0100)
Provides a little extra fork-safety on UNIX systems, adding to the
fact that all DRBGs reseed automatically when the fork_id changes.

Reviewed-by: Paul Dale <paul.dale@oracle.com>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/9802)

crypto/rand/rand_unix.c

index 1f608c9565aba9e2baf54bd987982b2a9b618dac..0cfa4e062557c4826c2872940dc5c6bbd4d0f408 100644 (file)
@@ -711,15 +711,18 @@ int rand_pool_add_nonce_data(RAND_POOL *pool)
 int rand_pool_add_additional_data(RAND_POOL *pool)
 {
     struct {
+        int fork_id;
         CRYPTO_THREAD_ID tid;
         uint64_t time;
     } data = { 0 };
 
     /*
      * Add some noise from the thread id and a high resolution timer.
+     * The fork_id adds some extra fork-safety.
      * The thread id adds a little randomness if the drbg is accessed
      * concurrently (which is the case for the <master> drbg).
      */
+    data.fork_id = openssl_get_fork_id();
     data.tid = CRYPTO_THREAD_get_current_id();
     data.time = get_timer_bits();