[OpenWrt-Devel] ubus: ubus_free: clear pending timers before freeing context
diff mbox

Message ID 1483423625-6656-1-git-send-email-abhimanyu.vishwakarma@imgtec.com
State Changes Requested
Delegated to: John Crispin
Headers show

Commit Message

Abhimanyu V Jan. 3, 2017, 6:07 a.m. UTC
From: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com>

If a synchronous operation is executed on a ubus context after
uloop_done() has been called, the context's pending_timer
may remain in uloop's list of timeouts.
This leads to undefined behaviour during next execution of uloop
code, as it may be referring to unavailable memory or memory
that has been allocated for different purposes.

Signed-off-by: Marcin Nowakowski <marcin.nowakowski@imgtec.com>
Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com>
---
 libubus.c | 1 +
 1 file changed, 1 insertion(+)

Patch
diff mbox

diff --git a/libubus.c b/libubus.c
index 8163ff7..a044003 100644
--- a/libubus.c
+++ b/libubus.c
@@ -362,6 +362,7 @@  void ubus_shutdown(struct ubus_context *ctx)
 	if (!ctx)
 		return;
 	close(ctx->sock.fd);
+	uloop_timeout_cancel(&ctx->pending_timer);
 	free(ctx->msgbuf.data);
 }