]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
log: pass the correct length to vsnprintf (#6168)
authorEvgeny Vereshchagin <evvers@ya.ru>
Thu, 22 Jun 2017 01:10:29 +0000 (04:10 +0300)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 22 Jun 2017 01:10:29 +0000 (21:10 -0400)
This prevents log_object_internalv from corrupting the stack.
Closes #6147.

Many thanks to Walter Doekes for the code review.

src/basic/log.c

index 62c9f1a78f0346f80f7822f938719c2f561a7989..e27256499391e14f201a9f16727d2ef825c41572 100644 (file)
@@ -720,7 +720,6 @@ int log_object_internalv(
 
         PROTECT_ERRNO;
         char *buffer, *b;
-        size_t l;
 
         if (error < 0)
                 error = -error;
@@ -737,16 +736,12 @@ int log_object_internalv(
                 size_t n;
 
                 n = strlen(object);
-                l = n + 2 + LINE_MAX;
-
-                buffer = newa(char, l);
+                buffer = newa(char, n + 2 + LINE_MAX);
                 b = stpcpy(stpcpy(buffer, object), ": ");
-        } else {
-                l = LINE_MAX;
-                b = buffer = newa(char, l);
-        }
+        } else
+                b = buffer = newa(char, LINE_MAX);
 
-        vsnprintf(b, l, format, ap);
+        vsnprintf(b, LINE_MAX, format, ap);
 
         return log_dispatch_internal(level, error, file, line, func,
                                      object_field, object, extra_field, extra, buffer);