Remove optimization for RAND_poll() failing.
authorNoah Misch <noah@leadboat.com>
Sat, 25 Jul 2020 21:50:59 +0000 (14:50 -0700)
committerNoah Misch <noah@leadboat.com>
Sat, 25 Jul 2020 21:50:59 +0000 (14:50 -0700)
The loop to generate seed data will exit on RAND_status(), so we don't
need to handle the case of RAND_poll() failing separately.  Failures
here are rare, so this a code cleanup, essentially.

Daniel Gustafsson, reviewed by David Steele and Michael Paquier.

Discussion: https://postgr.es/m/9B038FA5-23E8-40D0-B932-D515E1D8F66A@yesql.se

src/port/pg_strong_random.c

index eed8b878089489a3b527163b5394b76c00ffc73c..14e8382cd8952adbd7558667cd8266571050dd92 100644 (file)
@@ -108,7 +108,11 @@ pg_strong_random(void *buf, size_t len)
        /*
         * Check that OpenSSL's CSPRNG has been sufficiently seeded, and if not
         * add more seed data using RAND_poll().  With some older versions of
-        * OpenSSL, it may be necessary to call RAND_poll() a number of times.
+        * OpenSSL, it may be necessary to call RAND_poll() a number of times.  If
+        * RAND_poll() fails to generate seed data within the given amount of
+        * retries, subsequent RAND_bytes() calls will fail, but we allow that to
+        * happen to let pg_strong_random() callers handle that with appropriate
+        * error handling.
         */
 #define NUM_RAND_POLL_RETRIES 8
 
@@ -120,16 +124,7 @@ pg_strong_random(void *buf, size_t len)
                        break;
                }
 
-               if (RAND_poll() == 0)
-               {
-                       /*
-                        * RAND_poll() failed to generate any seed data, which means that
-                        * RAND_bytes() will probably fail.  For now, just fall through
-                        * and let that happen.  XXX: maybe we could seed it some other
-                        * way.
-                        */
-                       break;
-               }
+               RAND_poll();
        }
 
        if (RAND_bytes(buf, len) == 1)