DRBG: fix coverity issues
authorDr. Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
Tue, 17 Apr 2018 06:07:11 +0000 (08:07 +0200)
committerDr. Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
Tue, 17 Apr 2018 15:24:50 +0000 (17:24 +0200)
- drbg_lib.c: Silence coverity warning: the comment preceding the
  RAND_DRBG_instantiate() call explicitely states that the error
  is ignored and explains the reason why.

- drbgtest: Add checks for the return values of RAND_bytes() and
  RAND_priv_bytes() to run_multi_thread_test().

Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/5976)

crypto/rand/drbg_lib.c
test/drbgtest.c

index cc59236..16ac03b 100644 (file)
@@ -864,14 +864,14 @@ static RAND_DRBG *drbg_setup(RAND_DRBG *parent)
     drbg->reseed_counter = 1;
 
     /*
-     * Ignore instantiation error so support just-in-time instantiation.
+     * Ignore instantiation error to support just-in-time instantiation.
      *
      * The state of the drbg will be checked in RAND_DRBG_generate() and
      * an automatic recovery is attempted.
      */
-    RAND_DRBG_instantiate(drbg,
-                          (const unsigned char *) ossl_pers_string,
-                          sizeof(ossl_pers_string) - 1);
+    (void)RAND_DRBG_instantiate(drbg,
+                                (const unsigned char *) ossl_pers_string,
+                                sizeof(ossl_pers_string) - 1);
     return drbg;
 
 err:
index 5426046..d69456b 100644 (file)
@@ -783,6 +783,8 @@ error:
 }
 
 #if defined(OPENSSL_THREADS)
+static int multi_thread_rand_bytes_succeeded = 1;
+static int multi_thread_rand_priv_bytes_succeeded = 1;
 
 static void run_multi_thread_test(void)
 {
@@ -796,8 +798,10 @@ static void run_multi_thread_test(void)
     RAND_DRBG_set_reseed_time_interval(private, 1);
 
     do {
-        RAND_bytes(buf, sizeof(buf));
-        RAND_priv_bytes(buf, sizeof(buf));
+        if (RAND_bytes(buf, sizeof(buf)) <= 0)
+            multi_thread_rand_bytes_succeeded = 0;
+        if (RAND_priv_bytes(buf, sizeof(buf)) <= 0)
+            multi_thread_rand_priv_bytes_succeeded = 0;
     }
     while(time(NULL) - start < 5);
 }
@@ -849,7 +853,7 @@ static int wait_for_thread(thread_t thread)
  * The main thread will also run the test, so we'll have THREADS+1 parallel
  * tests running
  */
-#define THREADS 3
+# define THREADS 3
 
 static int test_multi_thread(void)
 {
@@ -861,6 +865,12 @@ static int test_multi_thread(void)
     run_multi_thread_test();
     for (i = 0; i < THREADS; i++)
         wait_for_thread(t[i]);
+
+    if (!TEST_true(multi_thread_rand_bytes_succeeded))
+        return 0;
+    if (!TEST_true(multi_thread_rand_priv_bytes_succeeded))
+        return 0;
+
     return 1;
 }
 #endif