1
0
mirror of https://github.com/systemd/systemd.git synced 2024-10-30 14:55:37 +03:00

Merge pull request #24938 from msizanoen1/journald-harden-clock-jump

journald: harden against forward clock jumps before unclean shutdown
This commit is contained in:
Luca Boccassi 2022-10-17 12:00:02 +02:00 committed by GitHub
commit 42fadfb168
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -510,6 +510,7 @@ int managed_journal_file_open_reliably(
ManagedJournalFile *template, ManagedJournalFile *template,
ManagedJournalFile **ret) { ManagedJournalFile **ret) {
_cleanup_(managed_journal_file_closep) ManagedJournalFile *old_file = NULL;
int r; int r;
r = managed_journal_file_open(-1, fname, open_flags, file_flags, mode, compress_threshold_bytes, metrics, r = managed_journal_file_open(-1, fname, open_flags, file_flags, mode, compress_threshold_bytes, metrics,
@ -538,6 +539,19 @@ int managed_journal_file_open_reliably(
/* The file is corrupted. Rotate it away and try it again (but only once) */ /* The file is corrupted. Rotate it away and try it again (but only once) */
log_warning_errno(r, "File %s corrupted or uncleanly shut down, renaming and replacing.", fname); log_warning_errno(r, "File %s corrupted or uncleanly shut down, renaming and replacing.", fname);
if (!template) {
/* The file is corrupted and no template is specified. Try opening it read-only as the
* template before rotating to inherit its sequence number and ID. */
r = managed_journal_file_open(-1, fname,
(open_flags & ~(O_ACCMODE|O_CREAT|O_EXCL)) | O_RDONLY,
file_flags, 0, compress_threshold_bytes, NULL,
mmap_cache, deferred_closes, NULL, &old_file);
if (r < 0)
log_debug_errno(r, "Failed to continue sequence from file %s, ignoring: %m", fname);
else
template = old_file;
}
r = journal_file_dispose(AT_FDCWD, fname); r = journal_file_dispose(AT_FDCWD, fname);
if (r < 0) if (r < 0)
return r; return r;