]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Remove DH_clear_flags call
authorDavid Benjamin <davidben@google.com>
Tue, 14 Jun 2022 03:37:55 +0000 (23:37 -0400)
committerOndřej Surý <ondrej@isc.org>
Mon, 18 Jul 2022 11:38:47 +0000 (13:38 +0200)
These calls have not been needed since OpenSSL 0.9.7h.

This dates to commit 704d6eeab1d8d6a2aeb99c37fa5a97322d9340fc, "Work
around non-reentrancy in openssl by disabling precomputation in keys".
This was in the bundled OpenSSL 0.9.3a era and made two changes. First,
it registered a locking callback because, in those days, OpenSSL needed
a callback to support locks. Second, it set flags to disable various
bits of cached state on DH, DSA, and RSA objects.

Looking back in OpenSSL 0.9.3a, that cached state was not protected by a
lock:
https://github.com/openssl/openssl/blob/OpenSSL_0_9_3a/crypto/rsa/rsa_eay.c#L137-L142

However, this was fixed in OpenSSL 0.9.7h:
https://github.com/openssl/openssl/commit/6ec8e63af6c1835a8b222350dbabf7bb2ace094f

The other flags (DSA and RSA) have since fallen away, DSA with the
removal of DSA altogether (3994b1f9c2bd4438586523fb2e49b0fb847b487b) and
RSA with 3a8d4a316eae09966c85e7e5befc682bd4744b34, "openssl 0.9.6a and
higher don't have the RSA locking bug [...] other algorithms still don't
do locking when performing precomputation [...]".

That seems to be referring to this OpenSSL change, which indeed fixed it
for RSA but not others:
https://github.com/openssl/openssl/commit/bb617a9646d95d0454edda995518f370172390e9

The 0.9.7h change above fixed it across the board, but there was never a
similar update to the workaround for DSA and DH. With such OpenSSL
versions long since out of support, the last remains of this workaround
can finally be removed.

lib/dns/openssl_shim.h
lib/dns/openssldh_link.c

index 439d9f999ae838fadf5f306ad794e6f838b233a3..e716b3a7a372abb6bad7a0b2443dadbe6015b360 100644 (file)
@@ -72,8 +72,6 @@ DH_get0_pqg(const DH *dh, const BIGNUM **p, const BIGNUM **q, const BIGNUM **g);
 
 int
 DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g);
-
-#define DH_clear_flags(d, f) ((d)->flags &= ~(f))
 #endif /* !HAVE_DH_GET0_KEY */
 
 #if !HAVE_ERR_GET_ERROR_ALL
index 0a2e11f51fabd660b39ac41e224ffc617ffc376c..e76cfbe31072f290926e21ba96eb0dd4d0c1b849 100644 (file)
@@ -492,7 +492,6 @@ openssldh_generate(dst_key_t *key, int generator, void (*callback)(int)) {
                DST_RET(dst__openssl_toresult2("DH_generate_key",
                                               DST_R_OPENSSLFAILURE));
        }
-       DH_clear_flags(dh, DH_FLAG_CACHE_MONT_P);
        key->keydata.dh = dh;
        dh = NULL;
 #else
@@ -785,7 +784,6 @@ openssldh_fromdns(dst_key_t *key, isc_buffer_t *data) {
        if (dh == NULL) {
                DST_RET(dst__openssl_toresult(ISC_R_NOMEMORY));
        }
-       DH_clear_flags(dh, DH_FLAG_CACHE_MONT_P);
 #else
        bld = OSSL_PARAM_BLD_new();
        if (bld == NULL) {
@@ -1116,7 +1114,6 @@ openssldh_parse(dst_key_t *key, isc_lex_t *lexer, dst_key_t *pub) {
        if (dh == NULL) {
                DST_RET(ISC_R_NOMEMORY);
        }
-       DH_clear_flags(dh, DH_FLAG_CACHE_MONT_P);
 #else
        bld = OSSL_PARAM_BLD_new();
        if (bld == NULL) {