Avoid corner-case memory leak in SSL parameter processing.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 16 Mar 2021 20:02:50 +0000 (16:02 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 16 Mar 2021 20:02:50 +0000 (16:02 -0400)
commita2764d87df0475c786d021f4cd553aff2ae5f5bf
tree0a22d1e4202d0812d48825a7c1effd54be744f18
parent33aa7d13d610397837bd0a1cd9a41488c5166742
Avoid corner-case memory leak in SSL parameter processing.

After reading the root cert list from the ssl_ca_file, immediately
install it as client CA list of the new SSL context.  That gives the
SSL context ownership of the list, so that SSL_CTX_free will free it.
This avoids a permanent memory leak if we fail further down in
be_tls_init(), which could happen if bogus CRL data is offered.

The leak could only amount to something if the CRL parameters get
broken after server start (else we'd just quit) and then the server
is SIGHUP'd many times without fixing the CRL data.  That's rather
unlikely perhaps, but it seems worth fixing, if only because the
code is clearer this way.

While we're here, add some comments about the memory management
aspects of this logic.

Noted by Jelte Fennema and independently by Andres Freund.
Back-patch to v10; before commit de41869b6 it doesn't matter,
since we'd not re-execute this code during SIGHUP.

Discussion: https://postgr.es/m/16160-18367e56e9a28264@postgresql.org
src/backend/libpq/be-secure-openssl.c