Blame SOURCES/openssl-1.0.2k-fips-randlock.patch

a14c93
diff -up openssl-1.0.2k/crypto/fips/fips_drbg_lib.c.fips-randlock openssl-1.0.2k/crypto/fips/fips_drbg_lib.c
a14c93
--- openssl-1.0.2k/crypto/fips/fips_drbg_lib.c.fips-randlock	2017-03-09 17:59:26.249231181 +0100
a14c93
+++ openssl-1.0.2k/crypto/fips/fips_drbg_lib.c	2017-11-16 09:16:06.188098078 +0100
a14c93
@@ -338,6 +338,12 @@ int FIPS_drbg_reseed(DRBG_CTX *dctx,
a14c93
     return drbg_reseed(dctx, adin, adinlen, 1);
a14c93
 }
a14c93
 
a14c93
+void FIPS_drbg_set_reseed(DRBG_CTX *dctx)
a14c93
+{
a14c93
+    if (dctx->status == DRBG_STATUS_READY)
a14c93
+        dctx->reseed_counter = dctx->reseed_interval;
a14c93
+}
a14c93
+
a14c93
 static int fips_drbg_check(DRBG_CTX *dctx)
a14c93
 {
a14c93
     if (dctx->xflags & DRBG_FLAG_TEST)
a14c93
diff -up openssl-1.0.2k/crypto/fips/fips_rand.h.fips-randlock openssl-1.0.2k/crypto/fips/fips_rand.h
a14c93
--- openssl-1.0.2k/crypto/fips/fips_rand.h.fips-randlock	2017-03-09 17:59:26.252231250 +0100
a14c93
+++ openssl-1.0.2k/crypto/fips/fips_rand.h	2017-11-07 10:06:40.241450151 +0100
a14c93
@@ -86,6 +86,7 @@ extern "C" {
a14c93
                               const unsigned char *pers, size_t perslen);
a14c93
     int FIPS_drbg_reseed(DRBG_CTX *dctx, const unsigned char *adin,
a14c93
                          size_t adinlen);
a14c93
+    void FIPS_drbg_set_reseed(DRBG_CTX *dctx);
a14c93
     int FIPS_drbg_generate(DRBG_CTX *dctx, unsigned char *out, size_t outlen,
a14c93
                            int prediction_resistance,
a14c93
                            const unsigned char *adin, size_t adinlen);
a14c93
diff -up openssl-1.0.2k/crypto/rand/md_rand.c.fips-randlock openssl-1.0.2k/crypto/rand/md_rand.c
a14c93
--- openssl-1.0.2k/crypto/rand/md_rand.c.fips-randlock	2017-03-09 17:59:26.255231320 +0100
a14c93
+++ openssl-1.0.2k/crypto/rand/md_rand.c	2017-12-06 09:20:23.615879425 +0100
a14c93
@@ -391,10 +391,10 @@ int ssleay_rand_bytes(unsigned char *buf
a14c93
     CRYPTO_w_unlock(CRYPTO_LOCK_RAND2);
a14c93
     crypto_lock_rand = 1;
a14c93
 
a14c93
-    /* always poll for external entropy in FIPS mode, drbg provides the 
a14c93
-     * expansion
a14c93
+    /* always poll for external entropy in FIPS mode, if run as seed
a14c93
+     * source, drbg provides the expansion
a14c93
      */
a14c93
-    if (!initialized || FIPS_module_mode()) {
a14c93
+    if (!initialized || (!lock && FIPS_module_mode())) {
a14c93
         RAND_poll();
a14c93
         initialized = 1;
a14c93
     }
a14c93
diff -up openssl-1.0.2k/crypto/rand/rand_lib.c.fips-randlock openssl-1.0.2k/crypto/rand/rand_lib.c
a14c93
--- openssl-1.0.2k/crypto/rand/rand_lib.c.fips-randlock	2017-03-09 17:59:26.292232183 +0100
a14c93
+++ openssl-1.0.2k/crypto/rand/rand_lib.c	2017-11-07 10:20:08.050403861 +0100
a14c93
@@ -238,7 +238,7 @@ static int drbg_rand_add(DRBG_CTX *ctx,
a14c93
     RAND_SSLeay()->add(in, inlen, entropy);
a14c93
     if (FIPS_rand_status()) {
a14c93
         CRYPTO_w_lock(CRYPTO_LOCK_RAND);
a14c93
-        FIPS_drbg_reseed(ctx, NULL, 0);
a14c93
+        FIPS_drbg_set_reseed(ctx);
a14c93
         CRYPTO_w_unlock(CRYPTO_LOCK_RAND);
a14c93
     }
a14c93
     return 1;
a14c93
@@ -249,7 +249,7 @@ static int drbg_rand_seed(DRBG_CTX *ctx,
a14c93
     RAND_SSLeay()->seed(in, inlen);
a14c93
     if (FIPS_rand_status()) {
a14c93
         CRYPTO_w_lock(CRYPTO_LOCK_RAND);
a14c93
-        FIPS_drbg_reseed(ctx, NULL, 0);
a14c93
+        FIPS_drbg_set_reseed(ctx);
a14c93
         CRYPTO_w_unlock(CRYPTO_LOCK_RAND);
a14c93
     }
a14c93
     return 1;