journal-authenticate: check overflow

This commit is contained in:
Yu Watanabe
2026-06-27 23:57:55 +09:00
parent 7061e6f3cb
commit 0a12d5a60e
3 changed files with 24 additions and 10 deletions
+1 -1
View File
@@ -114,7 +114,7 @@ static int run(int argc, char *argv[]) {
if (m->system_journal) {
usec_t u;
if (journal_file_next_evolve_usec(m->system_journal, &u))
if (journal_file_next_evolve_usec(m->system_journal, &u) >= 0)
t = MIN(t, usec_sub_unsigned(u, n));
}
#endif
@@ -164,20 +164,34 @@ int journal_file_parse_verification_key(JournalFile *f, const char *key) {
return 0;
}
bool journal_file_next_evolve_usec(JournalFile *f, usec_t *u) {
uint64_t epoch;
static int journal_auth_epoch_to_realtime_usec(JournalFile *f, uint64_t epoch, usec_t *ret_start, usec_t *ret_end) {
assert(f);
assert(f->fss_start_usec > 0);
assert(f->fss_interval_usec > 0);
uint64_t start, end;
if (!MUL_SAFE(&start, epoch, f->fss_interval_usec) ||
!INC_SAFE(&start, f->fss_start_usec) ||
!ADD_SAFE(&end, start, f->fss_interval_usec))
return -ERANGE;
if (ret_start)
*ret_start = start;
if (ret_end)
*ret_end = end;
return 0;
}
int journal_file_next_evolve_usec(JournalFile *f, usec_t *ret) {
assert(f);
assert(u);
if (!JOURNAL_HEADER_SEALED(f->header))
return false;
return -EOPNOTSUPP;
epoch = FSPRG_GetEpoch(f->fsprg_state.iov_base);
uint64_t epoch = FSPRG_GetEpoch(f->fsprg_state.iov_base);
*u = (usec_t) (f->fss_start_usec + f->fss_interval_usec * epoch + f->fss_interval_usec);
return true;
return journal_auth_epoch_to_realtime_usec(f, epoch, /* ret_start= */ NULL, ret);
}
int journal_file_fsprg_seek(JournalFile *f, uint64_t goal) {
@@ -18,4 +18,4 @@ int journal_file_parse_verification_key(JournalFile *f, const char *key);
int journal_file_fsprg_seek(JournalFile *f, uint64_t goal);
bool journal_file_next_evolve_usec(JournalFile *f, usec_t *u);
int journal_file_next_evolve_usec(JournalFile *f, usec_t *ret);