]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
lib/ns/client.c: Fix invalid order of DbC checks that could cause dereference before...
authorOndřej Surý <ondrej@sury.org>
Fri, 27 Sep 2019 10:10:44 +0000 (12:10 +0200)
committerOndřej Surý <ondrej@sury.org>
Thu, 3 Oct 2019 07:50:27 +0000 (09:50 +0200)
(cherry picked from commit b4a42a286fd33ef1bdc6d8b74ade12e56da3b35c)

lib/ns/client.c

index 0efe59a13c34b49827f7d5780f4a2b68cfd6b1b4..e84a3c853cdf5d2d027445039b881a2270eb42f0 100644 (file)
@@ -1204,7 +1204,7 @@ client_send(ns_client_t *client) {
        unsigned int preferred_glue;
        bool opt_included = false;
        size_t respsize;
-       dns_aclenv_t *env = ns_interfacemgr_getaclenv(client->interface->mgr);
+       dns_aclenv_t *env;
 #ifdef HAVE_DNSTAP
        unsigned char zone[DNS_NAME_MAXWIRE];
        dns_dtmsgtype_t dtmsgtype;
@@ -1213,6 +1213,8 @@ client_send(ns_client_t *client) {
 
        REQUIRE(NS_CLIENT_VALID(client));
 
+       env = ns_interfacemgr_getaclenv(client->interface->mgr);
+
        CTRACE("send");
 
        if (client->message->opcode == dns_opcode_query &&
@@ -1747,12 +1749,13 @@ ns_client_addopt(ns_client_t *client, dns_message_t *message,
        unsigned int flags;
        unsigned char expire[4];
        unsigned char advtimo[2];
-       dns_aclenv_t *env = ns_interfacemgr_getaclenv(client->interface->mgr);
+       dns_aclenv_t *env;
 
        REQUIRE(NS_CLIENT_VALID(client));
        REQUIRE(opt != NULL && *opt == NULL);
        REQUIRE(message != NULL);
 
+       env = ns_interfacemgr_getaclenv(client->interface->mgr);
        view = client->view;
        resolver = (view != NULL) ? view->resolver : NULL;
        if (resolver != NULL)
@@ -3348,13 +3351,15 @@ client_newconn(isc_task_t *task, isc_event_t *event) {
        isc_result_t result;
        ns_client_t *client = event->ev_arg;
        isc_socket_newconnev_t *nevent = (isc_socket_newconnev_t *)event;
-       dns_aclenv_t *env = ns_interfacemgr_getaclenv(client->interface->mgr);
+       dns_aclenv_t *env;
        uint32_t old;
 
        REQUIRE(event->ev_type == ISC_SOCKEVENT_NEWCONN);
        REQUIRE(NS_CLIENT_VALID(client));
        REQUIRE(client->task == task);
 
+       env = ns_interfacemgr_getaclenv(client->interface->mgr);
+
        UNUSED(task);
 
        INSIST(client->state == NS_CLIENTSTATE_READY);