• Dean Rasheed's avatar
    Guard against rare RAND_bytes() failures in pg_strong_random(). · 8f6ce7fb
    Dean Rasheed authored
    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
    8f6ce7fb
pg_strong_random.c 3.77 KB