diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2018-08-13 20:57:25 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-13 20:57:25 +0900 |
commit | 9e5f34a639f643456b9ed43974b59c620ef4fc34 (patch) | |
tree | 9d06444eec786bc4047d6be1db40eb7fc3868e2b | |
parent | 19feb28fa150048aca15d7cd3fe1a8ec023f276b (diff) | |
parent | 937b1171378bc1000a34fcdfe9534d898227e35f (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.c | 4 | ||||
-rw-r--r-- | src/journal/journald-syslog.c | 3 | ||||
-rw-r--r-- | src/journal/test-journal-syslog.c | 2 |
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); |