• Stephen Frost's avatar
    Fix SSL deadlock risk in libpq · b37c90f1
    Stephen Frost authored
    In libpq, we set up and pass to OpenSSL callback routines to handle
    locking.  When we run out of SSL connections, we try to clean things
    up by de-registering the hooks.  Unfortunately, we had a few calls
    into the OpenSSL library after these hooks were de-registered during
    SSL cleanup which lead to deadlocking.  This moves the thread callback
    cleanup to be after all SSL-cleanup related OpenSSL library calls.
    I've been unable to reproduce the deadlock with this fix.
    
    In passing, also move the close_SSL call to be after unlocking our
    ssl_config mutex when in a failure state.  While it looks pretty
    unlikely to be an issue, it could have resulted in deadlocks if we
    ended up in this code path due to something other than SSL_new
    failing.  Thanks to Heikki for pointing this out.
    
    Back-patch to all supported versions; note that the close_SSL issue
    only goes back to 9.0, so that hunk isn't included in the 8.4 patch.
    
    Initially found and reported by Vesa-Matti J Kari; many thanks to
    both Heikki and Andres for their help running down the specific
    issue and reviewing the patch.
    b37c90f1
fe-secure.c 42.8 KB