From 3b1b0f1aeb484a13ce6b730ad30f1e8b449e38ea Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Wed, 15 Mar 2023 15:12:41 +0900 Subject: [PATCH] sd-journal: fix segfault Unfortunately, journal_file_next_entry() returns 0 when the next entry not found. The commit cc938e4a0ab67707e489cc3970a8557ad89801ca adds FIXME comment about that. We should really fix that, but the function and its return value are used in many place, hence checking all usecases is not easy. So, let's workaround that here, and handle the 0 return value by the caller. Follow-up for 34af74946e8853411f18120007ebaca6549b2a52. Fixes #26822. --- src/libsystemd/sd-journal/sd-journal.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/libsystemd/sd-journal/sd-journal.c b/src/libsystemd/sd-journal/sd-journal.c index 6804cf4069..8964140f7a 100644 --- a/src/libsystemd/sd-journal/sd-journal.c +++ b/src/libsystemd/sd-journal/sd-journal.c @@ -2436,6 +2436,8 @@ static int journal_file_read_tail_timestamp(sd_journal *j, JournalFile *f) { r = journal_file_next_entry(f, 0, DIRECTION_UP, &o, NULL); if (r < 0) return r; + if (r == 0) + return -ENODATA; id = o->entry.boot_id; mo = le64toh(o->entry.monotonic);