From 43687d685ffd71fc1cf0ea1079f6d4958dff5026 Mon Sep 17 00:00:00 2001 From: "Dr. Matthias St. Pierre" Date: Tue, 17 Apr 2018 08:07:11 +0200 Subject: [PATCH] DRBG: fix coverity issues - 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 (Merged from https://github.com/openssl/openssl/pull/5976) --- crypto/rand/drbg_lib.c | 8 ++++---- test/drbgtest.c | 16 +++++++++++++--- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/crypto/rand/drbg_lib.c b/crypto/rand/drbg_lib.c index cc59236bcc..16ac03b8b6 100644 --- a/crypto/rand/drbg_lib.c +++ b/crypto/rand/drbg_lib.c @@ -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: diff --git a/test/drbgtest.c b/test/drbgtest.c index 5426046854..d69456b4ee 100644 --- a/test/drbgtest.c +++ b/test/drbgtest.c @@ -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 -- 2.25.1