summaryrefslogtreecommitdiffstats
path: root/src/ctrl
diff options
context:
space:
mode:
authorNeels Hofmeyr <neels@hofmeyr.de>2017-12-16 04:05:21 +0100
committerHarald Welte <laforge@gnumonks.org>2017-12-18 23:05:50 +0000
commitf2c10f108202c350a3c16f49156b11b0cd0dfa96 (patch)
treee623921a0f0f9c5193e9208bbab38f18262a141e /src/ctrl
parent6769ad6e0aca58ccc037746885976ea4f85cb318 (diff)
ctrl: fix mem leak when handling GET_REPLY and SET_REPLY
In ctrl_handle_msg() (code recently propagated from handle_control_read()), talloc_free() the parsed ctrl_cmd in all code paths. In particular, a free was missing in case ctrl_cmd_handle() returns CTRL_CMD_HANDLED. CTRL_CMD_HANDLED is triggered by GET_REPLY / SET_REPLY parsing, as show by ctrl_test.c. With the memleak fixed, adjust expected test output and make a detected mem leak abort the test immediately. Change-Id: Id583b413f8b8bd16e5cf92a8a9e8663903646381
Diffstat (limited to 'src/ctrl')
-rw-r--r--src/ctrl/control_if.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/src/ctrl/control_if.c b/src/ctrl/control_if.c
index 7c1d81ac..5c73b631 100644
--- a/src/ctrl/control_if.c
+++ b/src/ctrl/control_if.c
@@ -387,7 +387,6 @@ int ctrl_handle_msg(struct ctrl_handle *ctrl, struct ctrl_connection *ccon, stru
cmd->ccon = ccon;
if (ctrl_cmd_handle(ctrl, cmd, ctrl->data) != CTRL_CMD_HANDLED) {
ctrl_cmd_send(&ccon->write_queue, cmd);
- talloc_free(cmd);
}
} else {
cmd = talloc_zero(ccon, struct ctrl_cmd);
@@ -398,9 +397,9 @@ int ctrl_handle_msg(struct ctrl_handle *ctrl, struct ctrl_connection *ccon, stru
cmd->id = "err";
cmd->reply = "Command parser error.";
ctrl_cmd_send(&ccon->write_queue, cmd);
- talloc_free(cmd);
}
+ talloc_free(cmd);
return 0;
}