@@ -3420,14 +3420,20 @@ int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz)
34203420 #ifdef HAVE_ENTROPY_MEMUSE
34213421 ret = wc_Entropy_Get (MAX_ENTROPY_BITS , output , sz );
34223422 if (ret == 0 ) {
3423- return 0 ;
3423+ /* success, we're done */
3424+ return ret ;
34243425 }
3425- #ifdef ENTROPY_MEMUSE_FORCE_FAILURE
3426- /* Don't fallback to /dev/urandom. */
3426+ #ifdef ENTROPY_MEMUSE_FORCE_FAILURE
3427+ /* Don't fall back to /dev/urandom. */
34273428 return ret ;
3429+ #else
3430+ /* Reset error and fall back to using /dev/urandom. */
3431+ ret = 0 ;
34283432 #endif
34293433 #endif
34303434
3435+ #if !defined(HAVE_ENTROPY_MEMUSE ) || !defined(ENTROPY_MEMUSE_FORCE_FAILURE )
3436+
34313437 #if defined(HAVE_INTEL_RDSEED ) || defined(HAVE_AMD_RDSEED )
34323438 if (IS_INTEL_RDSEED (intel_flags )) {
34333439 ret = wc_GenerateSeed_IntelRD (NULL , output , sz );
@@ -3436,15 +3442,24 @@ int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz)
34363442 return ret ;
34373443 }
34383444 #ifdef FORCE_FAILURE_RDSEED
3439- /* don 't fallback to /dev/urandom */
3445+ /* Don 't fall back to /dev/urandom. */
34403446 return ret ;
34413447 #else
3442- /* reset error and fallback to using /dev/urandom */
3448+ /* Reset error and fall back to using /dev/urandom. */
34433449 ret = 0 ;
34443450 #endif
34453451 }
3452+ #ifdef FORCE_FAILURE_RDSEED
3453+ else {
3454+ /* Don't fall back to /dev/urandom */
3455+ return MISSING_RNG_E ;
3456+ }
3457+ #endif
34463458 #endif /* HAVE_INTEL_RDSEED || HAVE_AMD_RDSEED */
34473459
3460+ #if (!defined(HAVE_INTEL_RDSEED ) && !defined(HAVE_AMD_RDSEED )) || \
3461+ !defined(FORCE_FAILURE_RDSEED )
3462+
34483463 #if defined(WOLFSSL_GETRANDOM ) || defined(HAVE_GETRANDOM )
34493464 {
34503465 word32 grSz = sz ;
@@ -3472,16 +3487,20 @@ int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz)
34723487 if (ret == 0 )
34733488 return ret ;
34743489 #ifdef FORCE_FAILURE_GETRANDOM
3475- /* don't fallback to /dev/urandom */
3490+ /* don't fall back to /dev/urandom */
34763491 return ret ;
34773492 #elif !defined(NO_FILESYSTEM )
3478- /* reset error and fallback to using /dev/urandom if filesystem
3493+ /* reset error and fall back to using /dev/urandom if filesystem
34793494 * support is compiled in */
34803495 ret = 0 ;
34813496 #endif
34823497 }
34833498 #endif
34843499
3500+ #endif /* (!HAVE_INTEL_RDSEED && !HAVE_AMD_RDSEED) || !FORCE_FAILURE_RDSEED */
3501+
3502+ #endif /*!HAVE_ENTROPY_MEMUSE || !ENTROPY_MEMUSE_FORCE_FAILURE */
3503+
34853504#ifndef NO_FILESYSTEM
34863505 #ifndef NO_DEV_URANDOM /* way to disable use of /dev/urandom */
34873506 os -> fd = open ("/dev/urandom" , O_RDONLY );
0 commit comments