146 lines
5.0 KiB
Diff
146 lines
5.0 KiB
Diff
From dff843199f3ed60090eb6e9ae60e9278c82bec5f Mon Sep 17 00:00:00 2001
|
|
From: Tony Finch <fanf@isc.org>
|
|
Date: Fri, 9 Sep 2022 08:21:10 +0100
|
|
Subject: [PATCH] Ensure that named_server_t is properly initialized
|
|
|
|
Conflict: NA
|
|
Reference: https://gitlab.isc.org/isc-projects/bind9/-/commit/dff843199f3ed60090eb6e9ae60e9278c82bec5f
|
|
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.
|
|
---
|
|
bin/named/server.c | 72 ++++++----------------------------------------
|
|
1 files changed, 9 insertions(+), 63 deletions(-)
|
|
|
|
diff --git a/bin/named/server.c b/bin/named/server.c
|
|
index 54b13f8f54..b4cbd953a9 100644
|
|
--- a/bin/named/server.c
|
|
+++ b/bin/named/server.c
|
|
@@ -9971,13 +9971,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 "
|
|
@@ -9985,10 +9986,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 "
|
|
@@ -10018,7 +10017,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");
|
|
|
|
@@ -10042,14 +10040,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_socketmgr,
|
|
&server->zonemgr),
|
|
@@ -10057,37 +10047,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");
|
|
@@ -10102,28 +10061,15 @@ 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;
|
|
*serverp = server;
|
|
}
|
|
--
|
|
2.23.0
|