diff --git a/crypto/rand/drbg_lib.c b/crypto/rand/drbg_lib.c index cc59236bcc84a..16ac03b8b63f4 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 5426046854047..d69456b4ee31d 100644 --- a/test/drbgtest.c +++ b/test/drbgtest.c @@ -783,6 +783,8 @@ static int test_rand_reseed(void) } #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