@@ -3417,14 +3417,20 @@ int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz)
34173417 #ifdef HAVE_ENTROPY_MEMUSE
34183418 ret = wc_Entropy_Get (MAX_ENTROPY_BITS , output , sz );
34193419 if (ret == 0 ) {
3420- return 0 ;
3420+ /* success, we're done */
3421+ return ret ;
34213422 }
3422- #ifdef ENTROPY_MEMUSE_FORCE_FAILURE
3423- /* Don't fallback to /dev/urandom. */
3423+ #ifdef ENTROPY_MEMUSE_FORCE_FAILURE
3424+ /* Don't fall back to /dev/urandom. */
34243425 return ret ;
3426+ #else
3427+ /* Reset error and fall back to using /dev/urandom. */
3428+ ret = 0 ;
34253429 #endif
34263430 #endif
34273431
3432+ #if !defined(HAVE_ENTROPY_MEMUSE ) || !defined(ENTROPY_MEMUSE_FORCE_FAILURE )
3433+
34283434 #if defined(HAVE_INTEL_RDSEED ) || defined(HAVE_AMD_RDSEED )
34293435 if (IS_INTEL_RDSEED (intel_flags )) {
34303436 ret = wc_GenerateSeed_IntelRD (NULL , output , sz );
@@ -3433,15 +3439,24 @@ int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz)
34333439 return ret ;
34343440 }
34353441 #ifdef FORCE_FAILURE_RDSEED
3436- /* don 't fallback to /dev/urandom */
3442+ /* Don 't fall back to /dev/urandom. */
34373443 return ret ;
34383444 #else
3439- /* reset error and fallback to using /dev/urandom */
3445+ /* Reset error and fall back to using /dev/urandom. */
34403446 ret = 0 ;
34413447 #endif
34423448 }
3449+ #ifdef FORCE_FAILURE_RDSEED
3450+ else {
3451+ /* Don't fall back to /dev/urandom */
3452+ return MISSING_RNG_E ;
3453+ }
3454+ #endif
34433455 #endif /* HAVE_INTEL_RDSEED || HAVE_AMD_RDSEED */
34443456
3457+ #if (!defined(HAVE_INTEL_RDSEED ) && !defined(HAVE_AMD_RDSEED )) || \
3458+ !defined(FORCE_FAILURE_RDSEED )
3459+
34453460 #if defined(WOLFSSL_GETRANDOM ) || defined(HAVE_GETRANDOM )
34463461 {
34473462 word32 grSz = sz ;
@@ -3469,16 +3484,20 @@ int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz)
34693484 if (ret == 0 )
34703485 return ret ;
34713486 #ifdef FORCE_FAILURE_GETRANDOM
3472- /* don't fallback to /dev/urandom */
3487+ /* don't fall back to /dev/urandom */
34733488 return ret ;
34743489 #elif !defined(NO_FILESYSTEM )
3475- /* reset error and fallback to using /dev/urandom if filesystem
3490+ /* reset error and fall back to using /dev/urandom if filesystem
34763491 * support is compiled in */
34773492 ret = 0 ;
34783493 #endif
34793494 }
34803495 #endif
34813496
3497+ #endif /* (!HAVE_INTEL_RDSEED && !HAVE_AMD_RDSEED) || !FORCE_FAILURE_RDSEED */
3498+
3499+ #endif /*!HAVE_ENTROPY_MEMUSE || !ENTROPY_MEMUSE_FORCE_FAILURE */
3500+
34823501#ifndef NO_FILESYSTEM
34833502 #ifndef NO_DEV_URANDOM /* way to disable use of /dev/urandom */
34843503 os -> fd = open ("/dev/urandom" , O_RDONLY );
0 commit comments