From: Mark Andrews Date: Tue, 18 May 2021 06:37:08 +0000 (+1000) Subject: Add DBC REQUIRE to check that 'text' is non NULL X-Git-Tag: v9.16.20~23^2 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=1f36600e5af5c102f77c001dc8444ca66f9b8881;p=thirdparty%2Fbind9.git Add DBC REQUIRE to check that 'text' is non NULL for all control channel commands. This should silence gcc-10-analyzer reporting NULL pointer dereference of 'text'. (cherry picked from commit ac0fc3c2de27a8afac632081a8a2d1a73baa7c37) --- diff --git a/bin/named/server.c b/bin/named/server.c index c7d0fc71270..9f6f395bc55 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -10653,6 +10653,8 @@ named_server_retransfercommand(named_server_t *server, isc_lex_t *lex, dns_zone_t *raw = NULL; dns_zonetype_t type; + REQUIRE(text != NULL); + result = zone_from_args(server, lex, NULL, &zone, NULL, text, true); if (result != ISC_R_SUCCESS) { return (result); @@ -10700,6 +10702,8 @@ named_server_reloadcommand(named_server_t *server, isc_lex_t *lex, dns_zonetype_t type; const char *msg = NULL; + REQUIRE(text != NULL); + result = zone_from_args(server, lex, NULL, &zone, NULL, text, true); if (result != ISC_R_SUCCESS) { return (result); @@ -10780,6 +10784,8 @@ named_server_notifycommand(named_server_t *server, isc_lex_t *lex, dns_zone_t *zone = NULL; const char msg[] = "zone notify queued"; + REQUIRE(text != NULL); + result = zone_from_args(server, lex, NULL, &zone, NULL, text, true); if (result != ISC_R_SUCCESS) { return (result); @@ -10808,6 +10814,8 @@ named_server_refreshcommand(named_server_t *server, isc_lex_t *lex, const char msg2[] = "not a slave, mirror, or stub zone"; dns_zonetype_t type; + REQUIRE(text != NULL); + result = zone_from_args(server, lex, NULL, &zone, NULL, text, true); if (result != ISC_R_SUCCESS) { return (result); @@ -11243,6 +11251,8 @@ named_server_dumpdb(named_server_t *server, isc_lex_t *lex, const char *sep; bool found; + REQUIRE(text != NULL); + /* Skip the command name. */ ptr = next_token(lex, NULL); if (ptr == NULL) { @@ -11366,6 +11376,8 @@ named_server_dumpsecroots(named_server_t *server, isc_lex_t *lex, unsigned int used = isc_buffer_usedlength(*text); bool first = true; + REQUIRE(text != NULL); + /* Skip the command name. */ ptr = next_token(lex, text); if (ptr == NULL) { @@ -11554,6 +11566,8 @@ named_server_validation(named_server_t *server, isc_lex_t *lex, isc_result_t result; bool enable = true, set = true, first = true; + REQUIRE(text != NULL); + /* Skip the command name. */ ptr = next_token(lex, text); if (ptr == NULL) { @@ -11874,6 +11888,8 @@ named_server_status(named_server_t *server, isc_buffer_t **text) { char line[1024], hostname[256]; named_reload_t reload_status; + REQUIRE(text != NULL); + if (named_g_server->version_set) { ob = " ("; cb = ")"; @@ -12001,6 +12017,8 @@ named_server_testgen(isc_lex_t *lex, isc_buffer_t **text) { unsigned long i; const unsigned char chars[] = "abcdefghijklmnopqrstuvwxyz0123456789"; + REQUIRE(text != NULL); + /* Skip the command name. */ ptr = next_token(lex, text); if (ptr == NULL) { @@ -12096,6 +12114,8 @@ named_server_tsigdelete(named_server_t *server, isc_lex_t *lex, char target[DNS_NAME_FORMATSIZE]; char fbuf[16]; + REQUIRE(text != NULL); + (void)next_token(lex, text); /* skip command name */ ptr = next_token(lex, text); @@ -12220,6 +12240,8 @@ named_server_tsiglist(named_server_t *server, isc_buffer_t **text) { dns_view_t *view; unsigned int foundkeys = 0; + REQUIRE(text != NULL); + for (view = ISC_LIST_HEAD(server->viewlist); view != NULL; view = ISC_LIST_NEXT(view, link)) { @@ -12264,6 +12286,8 @@ named_server_rekey(named_server_t *server, isc_lex_t *lex, bool fullsign = false; char *ptr; + REQUIRE(text != NULL); + ptr = next_token(lex, text); if (ptr == NULL) { return (ISC_R_UNEXPECTEDEND); @@ -12273,6 +12297,8 @@ named_server_rekey(named_server_t *server, isc_lex_t *lex, fullsign = true; } + REQUIRE(text != NULL); + result = zone_from_args(server, lex, NULL, &zone, NULL, text, false); if (result != ISC_R_SUCCESS) { return (result); @@ -12345,6 +12371,8 @@ named_server_sync(named_server_t *server, isc_lex_t *lex, isc_buffer_t **text) { const char *vname, *sep, *arg; bool cleanup = false; + REQUIRE(text != NULL); + (void)next_token(lex, text); arg = next_token(lex, text); @@ -12354,6 +12382,8 @@ named_server_sync(named_server_t *server, isc_lex_t *lex, isc_buffer_t **text) { arg = next_token(lex, text); } + REQUIRE(text != NULL); + result = zone_from_args(server, lex, arg, &zone, NULL, text, false); if (result != ISC_R_SUCCESS) { return (result); @@ -12424,6 +12454,8 @@ named_server_freeze(named_server_t *server, bool freeze, isc_lex_t *lex, bool frozen; const char *msg = NULL; + REQUIRE(text != NULL); + result = zone_from_args(server, lex, NULL, &mayberaw, NULL, text, true); if (result != ISC_R_SUCCESS) { return (result); @@ -12540,6 +12572,8 @@ named_server_freeze(named_server_t *server, bool freeze, isc_lex_t *lex, */ isc_result_t named_smf_add_message(isc_buffer_t **text) { + REQUIRE(text != NULL); + return (putstr(text, "use svcadm(1M) to manage named")); } #endif /* HAVE_LIBSCF */ @@ -13813,6 +13847,8 @@ named_server_changezone(named_server_t *server, char *command, dns_fixedname_t fname; dns_name_t *dnsname; + REQUIRE(text != NULL); + if (strncasecmp(command, "add", 3) == 0) { addzone = true; } else { @@ -14088,6 +14124,8 @@ named_server_delzone(named_server_t *server, isc_lex_t *lex, isc_event_t *dzevent = NULL; isc_task_t *task = NULL; + REQUIRE(text != NULL); + /* Skip the command name. */ ptr = next_token(lex, text); if (ptr == NULL) { @@ -14302,6 +14340,8 @@ named_server_showzone(named_server_t *server, isc_lex_t *lex, bool added, redirect; ns_dzarg_t dzarg; + REQUIRE(text != NULL); + /* Parse parameters */ CHECK(zone_from_args(server, lex, NULL, &zone, zonename, text, true)); if (zone == NULL) { @@ -14437,6 +14477,8 @@ named_server_signing(named_server_t *server, isc_lex_t *lex, const char *ptr; size_t n; + REQUIRE(text != NULL); + dns_rdataset_init(&privset); /* Skip the command name. */ @@ -14667,6 +14709,8 @@ named_server_dnssec(named_server_t *server, isc_lex_t *lex, dns_db_t *db = NULL; dns_dbversion_t *version = NULL; + REQUIRE(text != NULL); + /* Skip the command name. */ ptr = next_token(lex, text); if (ptr == NULL) { @@ -15007,6 +15051,8 @@ named_server_zonestatus(named_server_t *server, isc_lex_t *lex, char **incfiles = NULL; int nfiles = 0; + REQUIRE(text != NULL); + isc_time_settoepoch(&loadtime); isc_time_settoepoch(&refreshtime); isc_time_settoepoch(&expiretime); @@ -15273,6 +15319,8 @@ named_server_nta(named_server_t *server, isc_lex_t *lex, bool readonly, dns_rdataclass_t rdclass = dns_rdataclass_in; bool first = true; + REQUIRE(text != NULL); + UNUSED(force); fname = dns_fixedname_initname(&fn); @@ -15826,6 +15874,8 @@ named_server_mkeys(named_server_t *server, isc_lex_t *lex, bool found = false; bool first = true; + REQUIRE(text != NULL); + /* Skip rndc command name */ cmd = next_token(lex, text); if (cmd == NULL) { @@ -15945,6 +15995,8 @@ named_server_dnstap(named_server_t *server, isc_lex_t *lex, bool reopen = false; int backups = 0; + REQUIRE(text != NULL); + if (server->dtenv == NULL) { return (ISC_R_NOTFOUND); } @@ -16099,6 +16151,8 @@ named_server_servestale(named_server_t *server, isc_lex_t *lex, isc_result_t result = ISC_R_SUCCESS; bool exclusive = false; + REQUIRE(text != NULL); + /* Skip the command name. */ ptr = next_token(lex, text); if (ptr == NULL) {