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>
{
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();