Fix memory leak when initializing DH parameters in backend
authorTom Lane
Sat, 20 Mar 2021 16:38:22 +0000 (12:38 -0400)
committerTom Lane
Sat, 20 Mar 2021 16:38:22 +0000 (12:38 -0400)
When loading DH parameters used for the generation of ephemeral DH keys
in the backend, the code has never bothered releasing the memory used
for the DH information loaded from a file or from libpq's default.  This
commit makes sure that the information is properly free()'d.

Back-patch of e0e569e1d.  We originally thought the leak was minor and
not worth back-patching, but Jelte Fennema pointed out that repeated
SIGHUP's can result in very serious bloat of the postmaster, which is
then multiplied by being duplicated into eadh forked child.

Back-patch to v10; the code looked different before c0a15e07c,
and didn't have a leak in the actually-live code paths.

Michael Paquier

Discussion: https://postgr.es/m/16160-18367e56e9a28264@postgresql.org

src/backend/libpq/be-secure-openssl.c

index d8fdf0b2f0f0072e7d367cd116e1e114512c3fee..0374c49a47b293d92d97754d5ea7a1e497222aaa 100644 (file)
@@ -1029,8 +1029,11 @@ initialize_dh(SSL_CTX *context, bool isServerStart)
                (errcode(ERRCODE_CONFIG_FILE_ERROR),
                 (errmsg("DH: could not set DH parameters: %s",
                         SSLerrmessage(ERR_get_error())))));
+       DH_free(dh);
        return false;
    }
+
+   DH_free(dh);
    return true;
 }