]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Fix GeoIP2 memory leak upon reconfiguration
authorMichał Kępień <michal@isc.org>
Mon, 2 Dec 2019 14:15:06 +0000 (15:15 +0100)
committerMichał Kępień <michal@isc.org>
Mon, 2 Dec 2019 14:15:06 +0000 (15:15 +0100)
Loaded GeoIP2 databases are only released when named is shut down, but
not during server reconfiguration.  This causes memory to be leaked
every time "rndc reconfig" or "rndc reload" is used, as long as any
GeoIP2 database is in use.  Fix by releasing any loaded GeoIP2 databases
before reloading them.  Do not call dns_geoip_shutdown() until server
shutdown as that function releases the memory context used for caching
GeoIP2 lookup results.

bin/named/geoip.c
bin/named/server.c

index 5e5d58698616c4c0ef868729596174598fbfb15a..f67960fed5e62571f2d0fe9b27d5eb8c9cc9f673 100644 (file)
@@ -137,6 +137,4 @@ named_geoip_shutdown(void) {
                named_g_geoip->domain = NULL;
        }
 #endif /* HAVE_GEOIP2 */
-
-       dns_geoip_shutdown();
 }
index 990863149a12abd38b2844d3879953f28e85859c..9321bc1dadcb30dc8ed403365dca3ff9b7fc63c8 100644 (file)
@@ -68,6 +68,7 @@
 #include <dns/events.h>
 #include <dns/forward.h>
 #include <dns/fixedname.h>
+#include <dns/geoip.h>
 #include <dns/journal.h>
 #include <dns/kasp.h>
 #include <dns/keytable.h>
@@ -8338,6 +8339,10 @@ load_configuration(const char *filename, named_server_t *server,
        isc_socketmgr_setreserved(named_g_socketmgr, reserved);
 
 #if defined(HAVE_GEOIP2)
+       /*
+        * Release any previously opened GeoIP2 databases.
+        */
+       named_geoip_shutdown();
        /*
         * Initialize GeoIP databases from the configured location.
         * This should happen before configuring any ACLs, so that we
@@ -9742,6 +9747,7 @@ shutdown_server(isc_task_t *task, isc_event_t *event) {
 #endif
 #if defined(HAVE_GEOIP2)
        named_geoip_shutdown();
+       dns_geoip_shutdown();
 #endif /* HAVE_GEOIP2 */
 
        dns_db_detach(&server->in_roothints);