]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
daemon: fixed memory leak and array bounds check fail
authorMarek Vavruša <mvavrusa@cloudflare.com>
Tue, 28 Feb 2017 19:05:20 +0000 (11:05 -0800)
committerMarek Vavruša <mvavrusa@cloudflare.com>
Tue, 28 Feb 2017 19:32:05 +0000 (11:32 -0800)
daemon/bindings.c
daemon/main.c
daemon/worker.c
modules/cookies/cookiemonster.c

index edd33e707631705744750b80e708663f40b439da..e56919b83669769448e682708469fc62bbe312a9 100644 (file)
@@ -302,10 +302,9 @@ static int net_interfaces(lua_State *L)
                char *p = buf;
                memset(buf, 0, sizeof(buf));
                for (unsigned k = 0; k < sizeof(iface.phys_addr); ++k) {
-                       sprintf(p, "%.2x:", iface.phys_addr[k] & 0xff);
+                       sprintf(p, "%s%.2x", k > 0 ? ":" : "", iface.phys_addr[k] & 0xff);
                        p += 3;
                }
-               *(p - 1) = '\0';
                lua_pushstring(L, buf);
                lua_setfield(L, -2, "mac");
 
index f937748d47eb7a81bd25a2675ef5b72e377e8ddc..e1e7320a2d16c4bbe943de641c16ca253f626b38 100644 (file)
@@ -408,6 +408,7 @@ static int run_worker(uv_loop_t *loop, struct engine *engine, fd_array_t *ipc_se
        return kr_ok();
 }
 
+#ifdef HAS_SYSTEMD
 static void free_sd_socket_names(char **socket_names, int count)
 {
        for (int i = 0; i < count; i++) {
@@ -415,6 +416,7 @@ static void free_sd_socket_names(char **socket_names, int count)
        }
        free(socket_names);
 }
+#endif
 
 int main(int argc, char **argv)
 {
index 919a221329654481e759e1067c912841cd025ef5..e31264729df7ea8d260923a72536ea0e24c3b305 100644 (file)
@@ -507,6 +507,7 @@ static int qr_task_send(struct qr_task *task, uv_handle_t *handle, struct sockad
                                          handle->type == UV_UDP ? SOCK_DGRAM : SOCK_STREAM,
                                          pkt);
                if (ret != kr_ok()) {
+                       req_release(task->worker, send_req);
                        return ret;
                }
        }
@@ -937,7 +938,6 @@ int worker_process_tcp(struct worker_ctx *worker, uv_stream_t *handle, const uin
        }
 
        int submitted = 0;
-       ssize_t nbytes = 0;
        struct qr_task *task = session->buffering;
 
        /* If this is a new query, create a new task that we can use
@@ -979,7 +979,7 @@ int worker_process_tcp(struct worker_ctx *worker, uv_stream_t *handle, const uin
        /* Finish reading DNS/TCP message length. */
        if (task->bytes_remaining == 0 && pkt_buf->size == 1) {
                pkt_buf->wire[1] = msg[0];
-               nbytes = msg_size(pkt_buf->wire);
+               ssize_t nbytes = msg_size(pkt_buf->wire);
                len -= 1;
                msg += 1;
                /* Cut off fragment length and start reading DNS message. */
index 8f870847da170170a980f630cf519ea3ae50ec03..13f548959310cb60c9faca00cb25fce282aac508 100644 (file)
@@ -75,8 +75,6 @@ static int srvr_sockaddr_cc_check(const struct sockaddr *srvr_sa,
                return -2;
        }
 
-       const struct knot_cc_alg *cc_alg = NULL;
-
        assert(clnt_sett->current.secr);
 
        /* The address must correspond with the client cookie. */
@@ -87,7 +85,7 @@ static int srvr_sockaddr_cc_check(const struct sockaddr *srvr_sa,
                .secret_len = clnt_sett->current.secr->size
        };
 
-       cc_alg = kr_cc_alg_get(clnt_sett->current.alg_id);
+       const struct knot_cc_alg *cc_alg = kr_cc_alg_get(clnt_sett->current.alg_id);
        if (!cc_alg) {
                return -2;
        }