From 924d99364548cf6f1b7d4d131fc08a3e04ecb524 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Vavru=C5=A1a?= Date: Tue, 28 Feb 2017 11:05:20 -0800 Subject: [PATCH] daemon: fixed memory leak and array bounds check fail --- daemon/bindings.c | 3 +-- daemon/main.c | 2 ++ daemon/worker.c | 4 ++-- modules/cookies/cookiemonster.c | 4 +--- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/daemon/bindings.c b/daemon/bindings.c index edd33e707..e56919b83 100644 --- a/daemon/bindings.c +++ b/daemon/bindings.c @@ -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"); diff --git a/daemon/main.c b/daemon/main.c index f937748d4..e1e7320a2 100644 --- a/daemon/main.c +++ b/daemon/main.c @@ -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) { diff --git a/daemon/worker.c b/daemon/worker.c index 919a22132..e31264729 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -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. */ diff --git a/modules/cookies/cookiemonster.c b/modules/cookies/cookiemonster.c index 8f870847d..13f548959 100644 --- a/modules/cookies/cookiemonster.c +++ b/modules/cookies/cookiemonster.c @@ -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; } -- 2.47.2