libubus: nullify stale msgbuf pointer in case of ubus_connect_ctx() failure
authorEyal Birger <eyal.birger@gmail.com>
Sun, 15 May 2016 05:13:27 +0000 (08:13 +0300)
committerFelix Fietkau <nbd@nbd.name>
Sun, 15 May 2016 07:39:24 +0000 (09:39 +0200)
If the ubus_reconnect() call fails in ubus_connect_ctx(), the msgbuf.data
newly allocated buffer is freed, but its pointer in the ubus_context is not
removed.

This leads to a double free error if ubus_auto_shutdown() is called for cleanup
after ubus_auto_connect() failed to connect to ubusd.

Signed-off-by: Eyal Birger <eyal.birger@gmail.com>
libubus.c

index d52faff9d9cd11b573584268df21f776b6fbe379..8163ff7004fb6e23487a7661f9c55b8cc9a55783 100644 (file)
--- a/libubus.c
+++ b/libubus.c
@@ -294,6 +294,7 @@ int ubus_connect_ctx(struct ubus_context *ctx, const char *path)
        avl_init(&ctx->objects, ubus_cmp_id, false, NULL);
        if (ubus_reconnect(ctx, path)) {
                free(ctx->msgbuf.data);
+               ctx->msgbuf.data = NULL;
                return -1;
        }