ubus: fix uhttpd crash
authorWojciech Jowsa <wojciech.jowsa@gmail.com>
Sun, 15 Nov 2020 09:19:17 +0000 (10:19 +0100)
committerDaniel Golle <daniel@makrotopia.org>
Mon, 23 Nov 2020 01:06:02 +0000 (01:06 +0000)
Unregister ubus subscriber in notification remove callback.
Without this call, uhttpd crashes when client tries to subscribe to
the ubus object after the object was unregistred and registered again.
It is bacuse the reference to ubus subscriber is not freed but
the memory is cleared in the uh_request_done function.

Signed-off-by: Wojciech Jowsa <wojciech.jowsa@gmail.com>
ubus.c

diff --git a/ubus.c b/ubus.c
index cc7447e8f48bd3c6f661464adef8dfd76af4b229..619135ce3912f3b728c698f4fe4d6018cade6422 100644 (file)
--- a/ubus.c
+++ b/ubus.c
@@ -357,6 +357,8 @@ static void uh_ubus_subscription_notification_remove_cb(struct ubus_context *ctx
        du = container_of(s, struct dispatch_ubus, sub);
        cl = container_of(du, struct client, dispatch.ubus);
 
+       ubus_unregister_subscriber(ctx, &du->sub);
+
        ops->request_done(cl);
 }