diff options
author | Jo-Philipp Wich <jo@mein.io> | 2019-10-17 11:50:39 +0200 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2019-10-17 11:50:39 +0200 |
commit | 37aa9196b603769ffbff4d0c58f76259a3791384 (patch) | |
tree | d71aa2a2f9e3a12e3f65e478c134d51d5e2ece25 | |
parent | 95f0973c340853007d7f2875ecc3541dc2459ae0 (diff) | |
download | rpcd-37aa9196b603769ffbff4d0c58f76259a3791384.tar.gz |
plugin: fix leaking invoked method name for exec plugins
The invoked method name was separately duplicated from the call_context
structure. The structure itself is eventually freed by rpc_exec_reply()
but the method string it points to is lost after that.
Use calloc_a() instead to allocate the string copy buffer together with
the context structure, to ensure that all involved memory is freed.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
-rw-r--r-- | plugin.c | 6 |
1 files changed, 3 insertions, 3 deletions
@@ -135,14 +135,14 @@ rpc_plugin_call(struct ubus_context *ctx, struct ubus_object *obj, { int rv = UBUS_STATUS_UNKNOWN_ERROR; struct call_context *c; - char *plugin; + char *plugin, *mptr; - c = calloc(1, sizeof(*c)); + c = calloc_a(sizeof(*c), &mptr, strlen(method) + 1); if (!c) goto fail; - c->method = strdup(method); + c->method = strcpy(mptr, method); c->input = blobmsg_format_json(msg, true); c->tok = json_tokener_new(); |