[LEDE-DEV] [PATCH] procd: fix ustream deadlock when there are 0 bytes or no newlines

John Crispin john at phrozen.org
Tue Feb 13 07:59:52 PST 2018


Signed-off-by: John Crispin <john at phrozen.org>
---
 service/instance.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/service/instance.c b/service/instance.c
index 917b003..27e35b1 100644
--- a/service/instance.c
+++ b/service/instance.c
@@ -469,18 +469,20 @@ instance_stdio(struct ustream *s, int prio, struct service_instance *in)
 	ulog_open(ULOG_SYSLOG, LOG_DAEMON, ident);
 
 	do {
-		str = ustream_get_read_buf(s, NULL);
+		str = ustream_get_read_buf(s, &len);
 		if (!str)
 			break;
 
-		newline = strchr(str, '\n');
-		if (!newline)
+		newline = memchr(str, '\n', len);
+		if (!newline && (s->r.buffer_len != len))
 			break;
 
-		*newline = 0;
+		if (newline) {
+			*newline = 0;
+			len = newline + 1 - str;
+		}
 		ulog(prio, "%s\n", str);
 
-		len = newline + 1 - str;
 		ustream_consume(s, len);
 	} while (1);
 
-- 
2.11.0




More information about the Lede-dev mailing list