From: Felix Fietkau Date: Fri, 26 Jan 2024 20:00:14 +0000 (+0100) Subject: udebug: fix crash in udebug_entry_vprintf with longer strings X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=c1be505732e6d254464973bdeacb955214c76c46;p=project%2Flibubox.git udebug: fix crash in udebug_entry_vprintf with longer strings The passed va_list ap cannot be used more than once. In order to deal with vsprintf retry, it needs to be copied first. Fixes a procd crash observed on several platforms. Signed-off-by: Felix Fietkau --- diff --git a/udebug.c b/udebug.c index 31b0210..e39a32c 100644 --- a/udebug.c +++ b/udebug.c @@ -610,6 +610,7 @@ int udebug_entry_vprintf(struct udebug_buf *buf, const char *fmt, va_list ap) struct udebug_ptr *ptr; uint32_t ofs; uint32_t len; + va_list ap2; char *str; if (!hdr) @@ -621,7 +622,9 @@ int udebug_entry_vprintf(struct udebug_buf *buf, const char *fmt, va_list ap) return -1; str = udebug_buf_alloc(buf, ofs, UDEBUG_MIN_ALLOC_LEN); - len = vsnprintf(str, UDEBUG_MIN_ALLOC_LEN, fmt, ap); + va_copy(ap2, ap); + len = vsnprintf(str, UDEBUG_MIN_ALLOC_LEN, fmt, ap2); + va_end(ap2); if (len <= UDEBUG_MIN_ALLOC_LEN) goto out;