Skip to content
Snippets Groups Projects
Commit 21741395 authored by Daniel Salzman's avatar Daniel Salzman
Browse files

knotd: fix memory leak if ctl socket bind fails

parent d17048d7
No related branches found
No related tags found
No related merge requests found
......@@ -216,28 +216,34 @@ static void setup_capabilities(void)
}
/*! \brief Event loop listening for signals and remote commands. */
static void event_loop(server_t *server, char *socket)
static void event_loop(server_t *server, const char *socket)
{
knot_ctl_t *ctl = knot_ctl_alloc();
if (ctl == NULL) {
log_fatal("control, failed to initialize (%s)",
knot_strerror(KNOT_ENOMEM));
return;
}
// Set control timeout.
knot_ctl_set_timeout(ctl, conf()->cache.ctl_timeout);
/* Get control socket configuration. */
char *listen = socket;
char *listen;
if (socket == NULL) {
conf_val_t listen_val = conf_get(conf(), C_CTL, C_LISTEN);
conf_val_t rundir_val = conf_get(conf(), C_SRV, C_RUNDIR);
char *rundir = conf_abs_path(&rundir_val, NULL);
listen = conf_abs_path(&listen_val, rundir);
free(rundir);
} else {
listen = strdup(socket);
}
knot_ctl_t *ctl = knot_ctl_alloc();
if (ctl == NULL) {
log_fatal("control, failed to initialize (%s)",
knot_strerror(KNOT_ENOMEM));
if (listen == NULL) {
log_fatal("control, empty socket path");
return;
}
// Set control timeout.
knot_ctl_set_timeout(ctl, conf()->cache.ctl_timeout);
log_info("control, binding to '%s'", listen);
/* Bind the control socket. */
......@@ -246,12 +252,10 @@ static void event_loop(server_t *server, char *socket)
knot_ctl_free(ctl);
log_fatal("control, failed to bind socket '%s' (%s)",
listen, knot_strerror(ret));
return;
}
if (socket == NULL) {
free(listen);
return;
}
free(listen);
enable_signals();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment