summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2018-08-13 20:57:25 +0900
committerGitHub <noreply@github.com>2018-08-13 20:57:25 +0900
commit9e5f34a639f643456b9ed43974b59c620ef4fc34 (patch)
tree9d06444eec786bc4047d6be1db40eb7fc3868e2b
parent19feb28fa150048aca15d7cd3fe1a8ec023f276b (diff)
parent937b1171378bc1000a34fcdfe9534d898227e35f (diff)
Merge pull request #9863 from evverx/issues-found-by-journald-fuzzersystemd/master
A few fixes for several issues uncovered with a home-brew fuzzer for journald
-rw-r--r--src/journal/journald-kmsg.c4
-rw-r--r--src/journal/journald-syslog.c3
-rw-r--r--src/journal/test-journal-syslog.c2
3 files changed, 6 insertions, 3 deletions
diff --git a/src/journal/journald-kmsg.c b/src/journal/journald-kmsg.c
index e9aff13168..7644bebfc8 100644
--- a/src/journal/journald-kmsg.c
+++ b/src/journal/journald-kmsg.c
@@ -93,7 +93,7 @@ static bool is_us(const char *identifier, const char *pid) {
streq(identifier, program_invocation_short_name);
}
-static void dev_kmsg_record(Server *s, const char *p, size_t l) {
+static void dev_kmsg_record(Server *s, char *p, size_t l) {
_cleanup_free_ char *message = NULL, *syslog_priority = NULL, *syslog_pid = NULL, *syslog_facility = NULL, *syslog_identifier = NULL, *source_time = NULL, *identifier = NULL, *pid = NULL;
struct iovec iovec[N_IOVEC_META_FIELDS + 7 + N_IOVEC_KERNEL_FIELDS + 2 + N_IOVEC_UDEV_FIELDS];
@@ -191,7 +191,7 @@ static void dev_kmsg_record(Server *s, const char *p, size_t l) {
e = memchr(k, '\n', l);
if (!e)
- return;
+ goto finish;
*e = 0;
diff --git a/src/journal/journald-syslog.c b/src/journal/journald-syslog.c
index 6dc6b0741a..72b73c2c0f 100644
--- a/src/journal/journald-syslog.c
+++ b/src/journal/journald-syslog.c
@@ -222,8 +222,9 @@ size_t syslog_parse_identifier(const char **buf, char **identifier, char **pid)
if (p[e] != '\0' && strchr(WHITESPACE, p[e]))
e++;
+ l = (p - *buf) + e;
*buf = p + e;
- return e;
+ return l;
}
static int syslog_skip_timestamp(const char **buf) {
diff --git a/src/journal/test-journal-syslog.c b/src/journal/test-journal-syslog.c
index 120477cc9f..415b9d23ca 100644
--- a/src/journal/test-journal-syslog.c
+++ b/src/journal/test-journal-syslog.c
@@ -41,6 +41,8 @@ int main(void) {
test_syslog_parse_identifier(" ", NULL, NULL, " ", 0);
test_syslog_parse_identifier(":", "", NULL, "", 1);
test_syslog_parse_identifier(": ", "", NULL, " ", 2);
+ test_syslog_parse_identifier(" :", "", NULL, "", 2);
+ test_syslog_parse_identifier(" pidu:", "pidu", NULL, "", 8);
test_syslog_parse_identifier("pidu:", "pidu", NULL, "", 5);
test_syslog_parse_identifier("pidu: ", "pidu", NULL, "", 6);
test_syslog_parse_identifier("pidu : ", NULL, NULL, "pidu : ", 0);