]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Cleanup OpenSSL reference on bad domain name
authorMark Andrews <marka@isc.org>
Sun, 29 Jan 2023 23:47:57 +0000 (10:47 +1100)
committerMark Andrews <marka@isc.org>
Wed, 15 Feb 2023 23:55:41 +0000 (10:55 +1100)
Free/detach tsigkey and sig0key when exiting and then call
dst_lib_destroy if we have previously called dst_lib_init.  This will,
in theory, allow OPENSSL_cleanup to free all memory.

bin/dig/dighost.c

index 2de357d9500825da5405ec08262335093b4d95d8..4bafbf7baec1154c32795428cfdb27f10561f6e2 100644 (file)
@@ -227,6 +227,9 @@ clear_current_lookup(void);
 static bool
 next_origin(dig_lookup_t *oldlookup);
 
+static void
+cleanup_openssl_refs(void);
+
 static int
 count_dots(char *string) {
        char *s;
@@ -2334,6 +2337,7 @@ setup_lookup(dig_lookup_t *lookup) {
                                clear_current_lookup();
                                return (false);
 #else  /* if TARGET_OS_IPHONE */
+                               cleanup_openssl_refs();
                                digexit();
 #endif /* if TARGET_OS_IPHONE */
                        }
@@ -4660,6 +4664,25 @@ cancel_all(void) {
        }
 }
 
+static void
+cleanup_openssl_refs(void) {
+       if (tsigkey != NULL) {
+               debug("freeing TSIG key %p", tsigkey);
+               dns_tsigkey_detach(&tsigkey);
+       }
+
+       if (sig0key != NULL) {
+               debug("freeing SIG(0) key %p", sig0key);
+               dst_key_free(&sig0key);
+       }
+
+       if (is_dst_up) {
+               debug("destroy DST lib");
+               dst_lib_destroy();
+               is_dst_up = false;
+       }
+}
+
 /*%
  * Destroy all of the libs we are using, and get everything ready for a
  * clean shutdown.
@@ -4681,27 +4704,13 @@ destroy_libs(void) {
 
        clear_searchlist();
 
-       if (tsigkey != NULL) {
-               debug("freeing TSIG key %p", tsigkey);
-               dns_tsigkey_detach(&tsigkey);
-       }
-
-       if (sig0key != NULL) {
-               debug("freeing SIG(0) key %p", sig0key);
-               dst_key_free(&sig0key);
-       }
+       cleanup_openssl_refs();
 
        if (namebuf != NULL) {
                debug("freeing key %p", tsigkey);
                isc_buffer_free(&namebuf);
        }
 
-       if (is_dst_up) {
-               debug("destroy DST lib");
-               dst_lib_destroy();
-               is_dst_up = false;
-       }
-
        debug("Removing log context");
        isc_log_destroy(&lctx);