From e562f131585fe6ae32b1f035ba48c1548d695259 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sun, 7 May 2023 00:16:30 +0900 Subject: [PATCH] sd-journal: re-read entry array object `test_object()` may call `journal_file_move_to_object()` and thus the `array` object may be invalidated. --- src/libsystemd/sd-journal/journal-file.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/libsystemd/sd-journal/journal-file.c b/src/libsystemd/sd-journal/journal-file.c index fb4b67c138d..f594b3eecb3 100644 --- a/src/libsystemd/sd-journal/journal-file.c +++ b/src/libsystemd/sd-journal/journal-file.c @@ -2975,8 +2975,16 @@ found: if (subtract_one && t == 0 && i == 0) return 0; + r = journal_file_move_to_object(f, OBJECT_ENTRY_ARRAY, a, &array); + if (r < 0) + return r; + + p = journal_file_entry_array_item(f, array, 0); + if (p <= 0) + return -EBADMSG; + /* Let's cache this item for the next invocation */ - chain_cache_put(f->chain_cache, ci, first, a, journal_file_entry_array_item(f, array, 0), t, subtract_one ? (i > 0 ? i-1 : UINT64_MAX) : i); + chain_cache_put(f->chain_cache, ci, first, a, p, t, subtract_one ? (i > 0 ? i-1 : UINT64_MAX) : i); if (subtract_one && i == 0) p = last_p;