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:
parent
aa00163d79
commit
952d1e784a
@ -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;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user