about summary refs log tree commit diff
diff options
context:
space:
mode:
authorArjun Shankar <arjun@redhat.com>2024-01-15 17:44:45 +0100
committerArjun Shankar <arjun@redhat.com>2024-01-30 15:53:37 +0100
commitddf542da94caf97ff43cc2875c88749880b7259b (patch)
tree718b463d18c506490d0c06fdac407ac78254d867
parent7e5a0c286da33159d47d0122007aac016f3e02cd (diff)
downloadglibc-ddf542da94caf97ff43cc2875c88749880b7259b.tar.gz
glibc-ddf542da94caf97ff43cc2875c88749880b7259b.tar.xz
glibc-ddf542da94caf97ff43cc2875c88749880b7259b.zip
syslog: Fix integer overflow in __vsyslog_internal (CVE-2023-6780)
__vsyslog_internal calculated a buffer size by adding two integers, but
did not first check if the addition would overflow.  This commit fixes
that.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Tested-by: Carlos O'Donell <carlos@redhat.com>
-rw-r--r--misc/syslog.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/misc/syslog.c b/misc/syslog.c
index 53440e47ad..4af87f54fd 100644
--- a/misc/syslog.c
+++ b/misc/syslog.c
@@ -41,6 +41,7 @@ static char sccsid[] = "@(#)syslog.c	8.4 (Berkeley) 3/18/94";
 #include <sys/uio.h>
 #include <sys/un.h>
 #include <syslog.h>
+#include <limits.h>
 
 static int LogType = SOCK_DGRAM;	/* type of socket connection */
 static int LogFile = -1;		/* fd for log */
@@ -219,7 +220,7 @@ __vsyslog_internal (int pri, const char *fmt, va_list ap,
     vl = __vsnprintf_internal (pos, len, fmt, apc, mode_flags);
     va_end (apc);
 
-    if (vl < 0)
+    if (vl < 0 || vl >= INT_MAX - l)
       goto out;
 
     if (vl >= len)