On Thu, Jul 16, 2026 at 09:22:22AM +0200, Stefano Brivio wrote: > ...instead of calling random(), to make static checkers happy. > > I don't think that an attacker could actually gain anything by making > router advertisement intervals predictable, but a doubt remains, and > this is cheap enough that we might just want to do this to get rid of > the noise from static checkers informing us that random() shouldn't be > used. > > Signed-off-by: Stefano Brivio Reviewed-by: David Gibson > --- > v2: Turn random_part to uint32_t and cast to time_t before using it, to > avoid using negative values > > ndp.c | 12 ++++++++---- > 1 file changed, 8 insertions(+), 4 deletions(-) > > diff --git a/ndp.c b/ndp.c > index 1f2bcb0..439fc0c 100644 > --- a/ndp.c > +++ b/ndp.c > @@ -413,6 +413,7 @@ void ndp_timer(const struct ctx *c, const struct timespec *now) > { > time_t max_rtr_adv_interval = DEFAULT_MAX_RTR_ADV_INTERVAL; > time_t min_rtr_adv_interval, interval; > + uint32_t random_part; > > if (!tap_is_ready(c) || c->no_ra || now->tv_sec < next_ra) > return; > @@ -433,15 +434,18 @@ void ndp_timer(const struct ctx *c, const struct timespec *now) > * and causing flurries of RAs at the same time. > * > * This random doesn't need to be cryptographically strong, so random(3) > - * is fine. Other routers on the link also want to avoid > - * synchronisation, and anything malicious has much easier ways to cause > - * trouble. > + * would be fine. Other routers on the link also want to avoid > + * synchronisation, and anything malicious would have much easier ways > + * to cause trouble. However, for the sake of static checkers, use high > + * quality entropy as provided by raw_random(). > * > * The modulus also makes this not strictly a uniform distribution, but, > * again, it's close enough for our purposes. > */ > + raw_random(&random_part, sizeof(random_part)); > interval = min_rtr_adv_interval + > - random() % (max_rtr_adv_interval - min_rtr_adv_interval); > + (time_t)random_part % (max_rtr_adv_interval - > + min_rtr_adv_interval); > > if (!next_ra) > goto first; > -- > 2.43.0 > -- David Gibson (he or they) | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you, not the other way | around. http://www.ozlabs.org/~dgibson