From 97ac89f9727d4fae1b2d63d2fc3b59e0d5d4bf65 Mon Sep 17 00:00:00 2001 From: Mihai Richard Date: Thu, 19 Jan 2017 12:51:04 +0000 Subject: [PATCH] ubusd: fix issue caused by an implicit cast An -1 returned by ubus_msg_writev() will be interpreted as UINT_MAX during a check to see how much data had could be written on the socket. Because sizeof() will return size_t it will promote the comparsion to unsigned Signed-off-by: Mihai Richard --- ubusd.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ubusd.c b/ubusd.c index 7279a70..5409b7f 100644 --- a/ubusd.c +++ b/ubusd.c @@ -148,12 +148,13 @@ void ubus_msg_send(struct ubus_client *cl, struct ubus_msg_buf *ub, bool free) if (!cl->tx_queue[cl->txq_cur]) { written = ubus_msg_writev(cl->sock.fd, ub, 0); - if (written >= ub->len + sizeof(ub->hdr)) - goto out; if (written < 0) written = 0; + if (written >= ub->len + sizeof(ub->hdr)) + goto out; + cl->txq_ofs = written; /* get an event once we can write to the socket again */ -- 2.30.2