From: Michał Kępień Date: Mon, 2 Dec 2019 14:15:06 +0000 (+0100) Subject: Fix GeoIP2 memory leak upon reconfiguration X-Git-Tag: v9.15.7~44^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=670afbe84a87e202fa795079d9d6d1639bcf391d;p=thirdparty%2Fbind9.git Fix GeoIP2 memory leak upon reconfiguration 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. --- diff --git a/bin/named/geoip.c b/bin/named/geoip.c index 5e5d5869861..f67960fed5e 100644 --- a/bin/named/geoip.c +++ b/bin/named/geoip.c @@ -137,6 +137,4 @@ named_geoip_shutdown(void) { named_g_geoip->domain = NULL; } #endif /* HAVE_GEOIP2 */ - - dns_geoip_shutdown(); } diff --git a/bin/named/server.c b/bin/named/server.c index 990863149a1..9321bc1dadc 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -68,6 +68,7 @@ #include #include #include +#include #include #include #include @@ -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);