From a02e1e2b41321735fe2248d282cd50ca9b646604 Mon Sep 17 00:00:00 2001 From: Hajimu UMEMOTO Date: Fri, 31 Oct 2003 16:06:05 +0000 Subject: [PATCH] use arc4random. Obtained from: KAME --- sys/netinet6/in6_ifattach.c | 7 ++----- sys/netinet6/mld6_var.h | 2 +- sys/netinet6/nd6.h | 2 +- sys/netinet6/nd6_nbr.c | 4 ++-- 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/sys/netinet6/in6_ifattach.c b/sys/netinet6/in6_ifattach.c index 13494f63d254..ea0db8beda7e 100644 --- a/sys/netinet6/in6_ifattach.c +++ b/sys/netinet6/in6_ifattach.c @@ -140,7 +140,6 @@ generate_tmp_ifid(seed0, seed1, ret) MD5_CTX ctxt; u_int8_t seed[16], digest[16], nullbuf[8]; u_int32_t val32; - struct timeval tv; /* If there's no hisotry, start with a random seed. */ bzero(nullbuf, sizeof(nullbuf)); @@ -148,8 +147,7 @@ generate_tmp_ifid(seed0, seed1, ret) int i; for (i = 0; i < 2; i++) { - microtime(&tv); - val32 = random() ^ tv.tv_usec; + val32 = arc4random(); bcopy(&val32, seed + sizeof(val32) * i, sizeof(val32)); } } else @@ -191,8 +189,7 @@ generate_tmp_ifid(seed0, seed1, ret) log(LOG_INFO, "generate_tmp_ifid: computed MD5 value is zero.\n"); - microtime(&tv); - val32 = random() ^ tv.tv_usec; + val32 = arc4random(); val32 = 1 + (val32 % (0xffffffff - 1)); } diff --git a/sys/netinet6/mld6_var.h b/sys/netinet6/mld6_var.h index 405f45ae5490..13ae1e6a843f 100644 --- a/sys/netinet6/mld6_var.h +++ b/sys/netinet6/mld6_var.h @@ -35,7 +35,7 @@ #ifdef _KERNEL -#define MLD6_RANDOM_DELAY(X) (random() % (X) + 1) +#define MLD6_RANDOM_DELAY(X) (arc4random() % (X) + 1) /* * States for MLD stop-listening processing diff --git a/sys/netinet6/nd6.h b/sys/netinet6/nd6.h index 28193b13c6ad..fc6e65a06de5 100644 --- a/sys/netinet6/nd6.h +++ b/sys/netinet6/nd6.h @@ -228,7 +228,7 @@ struct in6_ndifreq { #define TEMPADDR_REGEN_ADVANCE 5 /* sec */ #define MAX_TEMP_DESYNC_FACTOR 600 /* 10 min */ #define ND_COMPUTE_RTIME(x) \ - (((MIN_RANDOM_FACTOR * (x >> 10)) + (random() & \ + (((MIN_RANDOM_FACTOR * (x >> 10)) + (arc4random() & \ ((MAX_RANDOM_FACTOR - MIN_RANDOM_FACTOR) * (x >> 10)))) /1000) TAILQ_HEAD(nd_drhead, nd_defrouter); diff --git a/sys/netinet6/nd6_nbr.c b/sys/netinet6/nd6_nbr.c index 0ed83115c81b..8a26928ddda7 100644 --- a/sys/netinet6/nd6_nbr.c +++ b/sys/netinet6/nd6_nbr.c @@ -1086,9 +1086,9 @@ nd6_dad_start(ifa, tick) int ntick; if (*tick == 0) - ntick = random() % (MAX_RTR_SOLICITATION_DELAY * hz); + ntick = arc4random() % (MAX_RTR_SOLICITATION_DELAY * hz); else - ntick = *tick + random() % (hz / 2); + ntick = *tick + arc4random() % (hz / 2); *tick = ntick; nd6_dad_starttimer(dp, ntick); }