From: Tony Finch Date: Fri, 9 Sep 2022 07:21:10 +0000 (+0100) Subject: Ensure that named_server_t is properly initialized X-Git-Tag: v9.19.6~73^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7b71b1020f5c7feaf2c60f80e906583db96c95cb;p=thirdparty%2Fbind9.git Ensure that named_server_t is properly initialized There was a ubsan error reporting an invalid value for interface_auto (a boolean value cannot be 190) because it was not initialized. To avoid this problem happening again, ensure the whole of the server structure is initialized to zero before setting the (relatively few) non-zero elements. --- diff --git a/CHANGES b/CHANGES index 4c28c973161..abff8d63e73 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +5963. [bug] Ensure struct named_server is properly initialized. + [GL #6531] + 5962. [placeholder] 5961. [placeholder] diff --git a/bin/named/server.c b/bin/named/server.c index fd7426ac748..abd700da73f 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -10236,13 +10236,14 @@ named_server_create(isc_mem_t *mctx, named_server_t **serverp) { isc_result_t result; named_server_t *server = isc_mem_get(mctx, sizeof(*server)); - if (server == NULL) { - fatal(server, "allocating server object", ISC_R_NOMEMORY); - } - - server->mctx = mctx; - server->task = NULL; - server->zonemgr = NULL; + *server = (named_server_t){ + .mctx = mctx, + .statsfile = isc_mem_strdup(mctx, "named.stats"), + .bindkeysfile = isc_mem_strdup(mctx, named_g_defaultbindkeys), + .dumpfile = isc_mem_strdup(mctx, "named_dump.db"), + .secrootsfile = isc_mem_strdup(mctx, "named.secroots"), + .recfile = isc_mem_strdup(mctx, "named.recursing"), + }; #ifdef USE_DNSRPS CHECKFATAL(dns_dnsrps_server_create(), "initializing RPZ service " @@ -10250,10 +10251,8 @@ named_server_create(isc_mem_t *mctx, named_server_t **serverp) { #endif /* ifdef USE_DNSRPS */ /* Initialize server data structures. */ - server->interfacemgr = NULL; ISC_LIST_INIT(server->kasplist); ISC_LIST_INIT(server->viewlist); - server->in_roothints = NULL; /* Must be first. */ CHECKFATAL(dst_lib_init(named_g_mctx, named_g_engine), "initializing " @@ -10275,7 +10274,6 @@ named_server_create(isc_mem_t *mctx, named_server_t **serverp) { isc_task_setname(server->task, "server", server); isc_taskmgr_setexcltask(named_g_taskmgr, server->task); - server->sctx = NULL; CHECKFATAL(ns_server_create(mctx, get_matching_view, &server->sctx), "creating server context"); @@ -10302,50 +10300,11 @@ named_server_create(isc_mem_t *mctx, named_server_t **serverp) { server->sighup = isc_signal_new( named_g_loopmgr, named_server_reloadwanted, server, SIGHUP); - server->interface_timer = NULL; - server->heartbeat_timer = NULL; - server->pps_timer = NULL; - server->tat_timer = NULL; - - server->interface_interval = 0; - server->heartbeat_interval = 0; - CHECKFATAL(dns_zonemgr_create(named_g_mctx, named_g_loopmgr, named_g_taskmgr, named_g_netmgr, &server->zonemgr), "dns_zonemgr_create"); - server->statsfile = isc_mem_strdup(server->mctx, "named.stats"); - CHECKFATAL(server->statsfile == NULL ? ISC_R_NOMEMORY : ISC_R_SUCCESS, - "isc_mem_strdup"); - - server->bindkeysfile = isc_mem_strdup(server->mctx, - named_g_defaultbindkeys); - CHECKFATAL(server->bindkeysfile == NULL ? ISC_R_NOMEMORY - : ISC_R_SUCCESS, - "isc_mem_strdup"); - - server->dumpfile = isc_mem_strdup(server->mctx, "named_dump.db"); - CHECKFATAL(server->dumpfile == NULL ? ISC_R_NOMEMORY : ISC_R_SUCCESS, - "isc_mem_strdup"); - - server->secrootsfile = isc_mem_strdup(server->mctx, "named.secroots"); - CHECKFATAL(server->secrootsfile == NULL ? ISC_R_NOMEMORY - : ISC_R_SUCCESS, - "isc_mem_strdup"); - - server->recfile = isc_mem_strdup(server->mctx, "named.recursing"); - CHECKFATAL(server->recfile == NULL ? ISC_R_NOMEMORY : ISC_R_SUCCESS, - "isc_mem_strdup"); - - server->hostname_set = false; - server->hostname = NULL; - server->version_set = false; - server->version = NULL; - - server->zonestats = NULL; - server->resolverstats = NULL; - server->sockstats = NULL; CHECKFATAL(isc_stats_create(server->mctx, &server->sockstats, isc_sockstatscounter_max), "isc_stats_create"); @@ -10359,33 +10318,17 @@ named_server_create(isc_mem_t *mctx, named_server_t **serverp) { dns_resstatscounter_max), "dns_stats_create (resolver)"); - server->flushonshutdown = false; - - server->controls = NULL; CHECKFATAL(named_controls_create(server, &server->controls), "named_controls_create"); - server->dispatchgen = 0; + ISC_LIST_INIT(server->dispatches); ISC_LIST_INIT(server->statschannels); ISC_LIST_INIT(server->cachelist); - server->sessionkey = NULL; - server->session_keyfile = NULL; - server->session_keyname = NULL; - server->session_keyalg = DST_ALG_UNKNOWN; - server->session_keybits = 0; - - server->lockfile = NULL; - - server->dtenv = NULL; - server->magic = NAMED_SERVER_MAGIC; - server->tlsctx_server_cache = NULL; - server->tlsctx_client_cache = NULL; - *serverp = server; }