From 79acf8894bb217fca3343fba69537898e62d773f Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sat, 27 Jun 2026 14:08:03 +0900 Subject: [PATCH] journal-authenticate: refuse invalid start and interval parameters We have already checked that in journal_file_fss_load(). Let's also check the same in loading user provided key. --- src/libsystemd/sd-journal/journal-authenticate.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/libsystemd/sd-journal/journal-authenticate.c b/src/libsystemd/sd-journal/journal-authenticate.c index ff241fa0cb..2d65229495 100644 --- a/src/libsystemd/sd-journal/journal-authenticate.c +++ b/src/libsystemd/sd-journal/journal-authenticate.c @@ -496,7 +496,6 @@ int journal_file_parse_verification_key(JournalFile *f, const char *key) { _cleanup_(erase_and_freep) uint8_t *seed = NULL; size_t seed_size; const char *k; - unsigned long long start, interval; int r; assert(f); @@ -530,12 +529,20 @@ int journal_file_parse_verification_key(JournalFile *f, const char *key) { return -EKEYREJECTED; k++; - r = sscanf(k, "%llx-%llx", &start, &interval); + uint64_t start, interval; + r = sscanf(k, "%"PRIx64"-%"PRIx64, &start, &interval); if (r != 2) return -EKEYREJECTED; + if (start == 0 || interval == 0) + return -EKEYREJECTED; + + uint64_t start_usec; + if (!MUL_SAFE(&start_usec, start, interval)) + return -EKEYREJECTED; + f->fsprg_seed = IOVEC_MAKE(TAKE_PTR(seed), seed_size); - f->fss_start_usec = start * interval; + f->fss_start_usec = start_usec; f->fss_interval_usec = interval; return 0;