From: Yu Watanabe Date: Sun, 18 Jan 2026 10:15:31 +0000 (+0900) Subject: journal-file: do not trigger assertion on removed or corrupted journal file X-Git-Tag: v260-rc1~370 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=112cbc37906fb97afe0ad04164262cf62d0af5e9;p=thirdparty%2Fsystemd.git journal-file: do not trigger assertion on removed or corrupted journal file When a journal file is removed or corrupted, then the value `p`, which is read from Object.data.entry_offset, may be zero. Note, journal_file_move_to_object() checks the passed offset and return -EBADMSG if it is invalid. Fixes the issue reported at https://github.com/systemd/systemd/pull/40372#issuecomment-3762907261. --- diff --git a/src/libsystemd/sd-journal/journal-file.c b/src/libsystemd/sd-journal/journal-file.c index b3fa41ffbf7..8dcd599bbda 100644 --- a/src/libsystemd/sd-journal/journal-file.c +++ b/src/libsystemd/sd-journal/journal-file.c @@ -3318,7 +3318,9 @@ use_extra: static int test_object_offset(JournalFile *f, uint64_t p, uint64_t needle) { assert(f); - assert(p > 0); + + if (p <= 0) + return -EBADMSG; if (p == needle) return TEST_FOUND; @@ -3354,7 +3356,6 @@ static int test_object_seqnum(JournalFile *f, uint64_t p, uint64_t needle) { int r; assert(f); - assert(p > 0); r = journal_file_move_to_object(f, OBJECT_ENTRY, p, &o); if (r < 0) @@ -3395,7 +3396,6 @@ static int test_object_realtime(JournalFile *f, uint64_t p, uint64_t needle) { int r; assert(f); - assert(p > 0); r = journal_file_move_to_object(f, OBJECT_ENTRY, p, &o); if (r < 0) @@ -3436,7 +3436,6 @@ static int test_object_monotonic(JournalFile *f, uint64_t p, uint64_t needle) { int r; assert(f); - assert(p > 0); r = journal_file_move_to_object(f, OBJECT_ENTRY, p, &o); if (r < 0)