Fix egd and devrandom source configs
authorBernd Edlinger <bernd.edlinger@hotmail.de>
Sun, 17 May 2020 00:08:56 +0000 (02:08 +0200)
committerBernd Edlinger <bernd.edlinger@hotmail.de>
Wed, 20 May 2020 12:49:09 +0000 (14:49 +0200)
./config --with-rand-seed=egd

need to defines OPENSSL_RAND_SEED_EGD and OPENSSL_NO_EGD
so get rid of OPENSSL_NO_EGD (compiles but I did not really test EGD)

./config --with-rand-seed=devrandom

does not work since wait_random_seeded works under the assumption
that OPENSSL_RAND_SEED_GETRANDOM is supposed to be enabled as well,
that is usually the case, but not when only devrandom is enabled.
Skip the wait code in this special case.

Reviewed-by: Paul Dale <paul.dale@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/11848)

(cherry picked from commit ddec332f329a432a45c0131d83f3bfb46114532b)

Configure
crypto/rand/rand_unix.c

index 2e9efaa5f3da8f2ff1bde4c58e4f3b43d9596cdb..29f8b4dd4b1c52396044d3a4e31621425528f090 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -1049,6 +1049,9 @@ if (scalar(@seed_sources) == 0) {
     print "Using os-specific seed configuration\n";
     push @seed_sources, 'os';
 }
+if (scalar(grep { $_ eq 'egd' } @seed_sources) > 0) {
+    delete $disabled{'egd'};
+}
 if (scalar(grep { $_ eq 'none' } @seed_sources) > 0) {
     die "Cannot seed with none and anything else" if scalar(@seed_sources) > 1;
     warn <<_____ if scalar(@seed_sources) == 1;
index 19b6138a1f12387c44868462c547a897345468ce..da66773e4ab9135df2b8a2d3f7abf107f97d716d 100644 (file)
@@ -411,7 +411,8 @@ static struct random_device {
 } random_devices[OSSL_NELEM(random_device_paths)];
 static int keep_random_devices_open = 1;
 
-#   if defined(__linux) && defined(DEVRANDOM_WAIT)
+#   if defined(__linux) && defined(DEVRANDOM_WAIT) \
+       && defined(OPENSSL_RAND_SEED_GETRANDOM)
 static void *shm_addr;
 
 static void cleanup_shm(void)
@@ -489,7 +490,7 @@ static int wait_random_seeded(void)
     }
     return seeded;
 }
-#   else /* defined __linux */
+#   else /* defined __linux && DEVRANDOM_WAIT && OPENSSL_RAND_SEED_GETRANDOM */
 static int wait_random_seeded(void)
 {
     return 1;