journald: fix assertion failure on journal_file_link_data. (#5843)
authorYusuke Nojima <nojima718@gmail.com>
Sat, 29 Apr 2017 17:37:53 +0000 (02:37 +0900)
committerLennart Poettering <lennart@poettering.net>
Sat, 29 Apr 2017 17:37:53 +0000 (19:37 +0200)
When some error occurs during the initialization of JournalFile,
the JournalFile can be left without hash tables created.  When later
trying to append an entry to that file, the assertion in
journal_file_link_data() fails, and journald crashes.

This patch fix this issue by checking *_hash_table_size in
journal_file_verify_header().

src/journal/journal-file.c

index 14cb01a..243d519 100644 (file)
@@ -613,6 +613,9 @@ static int journal_file_verify_header(JournalFile *f) {
                         return -EBUSY;
                 }
 
+                if (f->header->field_hash_table_size == 0 || f->header->data_hash_table_size == 0)
+                        return -EBADMSG;
+
                 /* Don't permit appending to files from the future. Because otherwise the realtime timestamps wouldn't
                  * be strictly ordered in the entries in the file anymore, and we can't have that since it breaks
                  * bisection. */