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:
commit
42fadfb168
@ -510,10 +510,11 @@ 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,
|
||||||
mmap_cache, deferred_closes, template, ret);
|
mmap_cache, deferred_closes, template, ret);
|
||||||
if (!IN_SET(r,
|
if (!IN_SET(r,
|
||||||
-EBADMSG, /* Corrupted */
|
-EBADMSG, /* Corrupted */
|
||||||
-ENODATA, /* Truncated */
|
-ENODATA, /* Truncated */
|
||||||
@ -538,10 +539,23 @@ 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;
|
||||||
|
|
||||||
return managed_journal_file_open(-1, fname, open_flags, file_flags, mode, compress_threshold_bytes, metrics,
|
return managed_journal_file_open(-1, fname, open_flags, file_flags, mode, compress_threshold_bytes, metrics,
|
||||||
mmap_cache, deferred_closes, template, ret);
|
mmap_cache, deferred_closes, template, ret);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user