]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Ensure that named_server_t is properly initialized
authorTony Finch <fanf@isc.org>
Fri, 9 Sep 2022 07:21:10 +0000 (08:21 +0100)
committerTony Finch <fanf@isc.org>
Mon, 12 Sep 2022 10:26:33 +0000 (11:26 +0100)
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.

CHANGES
bin/named/server.c

diff --git a/CHANGES b/CHANGES
index e8ea8e1e602e92a1fda37c126d40cb8341009a10..53b4bcfa467ee1dd5d5b96842065a15bf2927c15 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+5963.  [bug]           Ensure struct named_server is properly initialized.
+                       [GL #6531]
+
 5956.  [func]          Make RRL code treat all QNAMEs that are subject to
                        wildcard processing within a given zone as the same
                        name. [GL #3459]
index 119c6f568bc72b40331ecf9259dc4913574255c7..d4ac044ddae24c7e6837cfeb754039ae30cf4c01 100644 (file)
@@ -10226,13 +10226,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 "
@@ -10240,10 +10241,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 "
@@ -10265,7 +10264,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");
 
@@ -10289,14 +10287,6 @@ named_server_create(isc_mem_t *mctx, named_server_t **serverp) {
                isc_app_onrun(named_g_mctx, server->task, run_server, server),
                "isc_app_onrun");
 
-       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_taskmgr,
                                      named_g_timermgr, named_g_netmgr,
                                      &server->zonemgr),
@@ -10304,37 +10294,6 @@ named_server_create(isc_mem_t *mctx, named_server_t **serverp) {
        CHECKFATAL(dns_zonemgr_setsize(server->zonemgr, 1000), "dns_zonemgr_"
                                                               "setsize");
 
-       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");
@@ -10348,33 +10307,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;
 }