From: Felix Fietkau Date: Mon, 9 Aug 2021 10:49:34 +0000 (+0200) Subject: libubus: use list_empty/list_first_entry in ubus_process_pending_msg X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=c3f3e194870973a888cabc7129f6f8ec0c3cccee;p=project%2Fubus.git libubus: use list_empty/list_first_entry in ubus_process_pending_msg Simplifies checks and avoids potential list corruption on recursive calls Signed-off-by: Felix Fietkau (cherry picked from commit 2099bb3ad9972c6188c38fd885ae74f3323fcacc) --- diff --git a/libubus.c b/libubus.c index 91f317c..7ce454e 100644 --- a/libubus.c +++ b/libubus.c @@ -115,12 +115,13 @@ ubus_process_msg(struct ubus_context *ctx, struct ubus_msghdr_buf *buf, int fd) static void ubus_process_pending_msg(struct uloop_timeout *timeout) { struct ubus_context *ctx = container_of(timeout, struct ubus_context, pending_timer); - struct ubus_pending_msg *pending, *tmp; + struct ubus_pending_msg *pending; - list_for_each_entry_safe(pending, tmp, &ctx->pending, list) { + while (!list_empty(&ctx->pending)) { if (ctx->stack_depth) break; + pending = list_first_entry(&ctx->pending, struct ubus_pending_msg, list); list_del(&pending->list); ubus_process_msg(ctx, &pending->hdr, -1); free(pending);