diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2018-05-20 22:45:22 +0200 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2018-05-31 14:30:23 +0200 |
commit | 1e448731f51865184ba988b246d02823a9284d6c (patch) | |
tree | 1fd5a78cf210de23e88eec1ef953425f1b315874 | |
parent | 9be391d4dbe1e5f83e44486c1a2a91ab0327be6c (diff) | |
download | systemd-1e448731f51865184ba988b246d02823a9284d6c.tar.gz |
basic/journal-importer: reject any field names that journald would reject
$ build-asan/fuzz-journal-remote test/fuzz-regressions/fuzz-journal-remote/crash-96dee870ea66d03e89ac321eee28ea63a9b9aa45
...
Ignoring invalid field: "S\020"
Ignoring invalid field: "S\020"
...
If the field name includes nul bytes, we won't print all of the name.
But that seems enough of a corner case to ignore.
-rw-r--r-- | src/basic/journal-importer.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/basic/journal-importer.c b/src/basic/journal-importer.c index 1d5f84af4d..86aa834525 100644 --- a/src/basic/journal-importer.c +++ b/src/basic/journal-importer.c @@ -14,6 +14,7 @@ #include "io-util.h" #include "journal-file.h" #include "journal-importer.h" +#include "journal-util.h" #include "parse-util.h" #include "string-util.h" #include "unaligned.h" @@ -347,6 +348,16 @@ int journal_importer_process_data(JournalImporter *imp) { /* chomp newline */ n--; + if (!journal_field_valid(line, sep - line, true)) { + char buf[64], *t; + + t = strndupa(line, sep - line); + log_debug("Ignoring invalid field: \"%s\"", + cellescape(buf, t)); + + return 0; + } + r = iovw_put(&imp->iovw, line, n); if (r < 0) return r; |