_cleanup_(erase_and_freep) uint8_t *seed = NULL;
size_t seed_size;
const char *k;
- unsigned long long start, interval;
int r;
assert(f);
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;