]> granicus.if.org Git - postgresql/commit
Guard against rare RAND_bytes() failures in pg_strong_random().
authorDean Rasheed <dean.a.rasheed@gmail.com>
Fri, 20 Jul 2018 07:55:44 +0000 (08:55 +0100)
committerDean Rasheed <dean.a.rasheed@gmail.com>
Fri, 20 Jul 2018 07:55:44 +0000 (08:55 +0100)
commit8f6ce7fb090a674f18b72e89a2b868fe1343fe8f
treeeecca3343f4a6385fa35ded4ecb70f7b815837df
parentf2b1316a94796b69eed6773cfb38267947ea19ac
Guard against rare RAND_bytes() failures in pg_strong_random().

When built using OpenSSL, pg_strong_random() uses RAND_bytes() to
generate the random number. On very rare occasions that can fail, if
its PRNG has not been seeded with enough data. Additionally, once it
does fail, all subsequent calls will also fail until more seed data is
added. Since this is required during backend startup, this can result
in all new backends failing to start until a postmaster restart.

Guard against that by checking the state of OpenSSL's PRNG using
RAND_status(), and if necessary (very rarely), seeding it using
RAND_poll().

Back-patch to v10, where pg_strong_random() was introduced.

Dean Rasheed and Michael Paquier.

Discussion: https://postgr.es/m/CAEZATCXMtxbzSAvyKKk5uCRf9pNt4UV%2BF_5v%3DgLfJUuPxU4Ytg%40mail.gmail.com
src/port/pg_strong_random.c