From: Mihai Richard Date: Thu, 19 Jan 2017 12:51:04 +0000 (+0000) Subject: ubusd: fix issue caused by an implicit cast X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fubus.git;a=commitdiff_plain;h=97ac89f9727d4fae1b2d63d2fc3b59e0d5d4bf65 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 --- 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 */