You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
2.9 KiB
66 lines
2.9 KiB
4 years ago
|
From c394463688c332199a8fcabe6f84818b57c730b3 Mon Sep 17 00:00:00 2001
|
||
|
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
||
|
Date: Tue, 2 Oct 2018 12:46:31 +0200
|
||
|
Subject: [PATCH] journal-upload: add asserts that snprintf does not return an
|
||
|
error
|
||
|
|
||
|
LGMT complains:
|
||
|
> The size argument of this snprintf call is derived from its return value,
|
||
|
> which may exceed the size of the buffer and overflow.
|
||
|
|
||
|
Let's make sure that r is non-negative. (This shouldn't occur unless the format
|
||
|
string is borked, so let's just add an assert.)
|
||
|
Then, let's reorder the comparison to avoid the potential overflow.
|
||
|
|
||
|
(cherry picked from commit 91db8ed5b2e67abf738381a6ed6a05a8271498cd)
|
||
|
|
||
|
Resolves: #1694605
|
||
|
---
|
||
|
src/journal-remote/journal-upload-journal.c | 12 ++++++++----
|
||
|
1 file changed, 8 insertions(+), 4 deletions(-)
|
||
|
|
||
|
diff --git a/src/journal-remote/journal-upload-journal.c b/src/journal-remote/journal-upload-journal.c
|
||
|
index 5fd639a76a..c244a76932 100644
|
||
|
--- a/src/journal-remote/journal-upload-journal.c
|
||
|
+++ b/src/journal-remote/journal-upload-journal.c
|
||
|
@@ -30,7 +30,8 @@ static ssize_t write_entry(char *buf, size_t size, Uploader *u) {
|
||
|
|
||
|
r = snprintf(buf + pos, size - pos,
|
||
|
"__CURSOR=%s\n", u->current_cursor);
|
||
|
- if (pos + r > size)
|
||
|
+ assert(r >= 0);
|
||
|
+ if ((size_t) r > size - pos)
|
||
|
/* not enough space */
|
||
|
return pos;
|
||
|
|
||
|
@@ -54,7 +55,8 @@ static ssize_t write_entry(char *buf, size_t size, Uploader *u) {
|
||
|
|
||
|
r = snprintf(buf + pos, size - pos,
|
||
|
"__REALTIME_TIMESTAMP="USEC_FMT"\n", realtime);
|
||
|
- if (r + pos > size)
|
||
|
+ assert(r >= 0);
|
||
|
+ if ((size_t) r > size - pos)
|
||
|
/* not enough space */
|
||
|
return pos;
|
||
|
|
||
|
@@ -79,7 +81,8 @@ static ssize_t write_entry(char *buf, size_t size, Uploader *u) {
|
||
|
|
||
|
r = snprintf(buf + pos, size - pos,
|
||
|
"__MONOTONIC_TIMESTAMP="USEC_FMT"\n", monotonic);
|
||
|
- if (r + pos > size)
|
||
|
+ assert(r >= 0);
|
||
|
+ if ((size_t) r > size - pos)
|
||
|
/* not enough space */
|
||
|
return pos;
|
||
|
|
||
|
@@ -104,7 +107,8 @@ static ssize_t write_entry(char *buf, size_t size, Uploader *u) {
|
||
|
|
||
|
r = snprintf(buf + pos, size - pos,
|
||
|
"_BOOT_ID=%s\n", sd_id128_to_string(boot_id, sid));
|
||
|
- if (r + pos > size)
|
||
|
+ assert(r >= 0);
|
||
|
+ if ((size_t) r > size - pos)
|
||
|
/* not enough space */
|
||
|
return pos;
|
||
|
|