1
0
mirror of https://github.com/systemd/systemd.git synced 2025-01-25 10:04:04 +03:00

journal: Improve handling of corruption during upwards entry iteration

If we're going upwards in the journal file during entry iteration and we
can't reach the current entry due to corruption, start iterating upwards
from the last reachable entry array. This is equivalent to skipping
all entries in the array that can't be reached anymore.

Fixes #22431
This commit is contained in:
Daan De Meyer 2022-02-07 20:19:29 +00:00
parent aa00163d79
commit 952d1e784a

View File

@ -2224,6 +2224,24 @@ static int generic_array_get(
while (a > 0) {
r = journal_file_move_to_object(f, OBJECT_ENTRY_ARRAY, a, &o);
if (IN_SET(r, -EBADMSG, -EADDRNOTAVAIL)) {
/* If there's corruption and we're going downwards, let's pretend we reached the
* final entry in the entry array chain. */
if (direction == DIRECTION_DOWN)
return 0;
/* If there's corruption and we're going upwards, move back to the previous entry
* array and start iterating entries from there. */
r = bump_entry_array(f, NULL, a, first, DIRECTION_UP, &a);
if (r < 0)
return r;
i = UINT64_MAX;
break;
}
if (r < 0)
return r;