Andrey Chernov writes: > On Sun, Jan 22, 2012 at 09:43:02PM +0000, Mark Murray wrote: > > > Thanx for review! I'll send final version to this thread a bit > > > later when I'll find more free time. > > Final, unless something else noticed.
Cool. NOTE: I am only eyeballing this, not testing it. > --- sys/libkern.h.bak 2012-01-16 07:15:12.000000000 +0400 > +++ sys/libkern.h 2012-01-25 17:31:49.000000000 +0400 > @@ -72,6 +72,7 @@ static __inline quad_t qabs(quad_t a) { > > /* Prototypes for non-quad routines. */ > struct malloc_type; > +extern int arc4rand_iniseed_state; > uint32_t arc4random(void); > void arc4rand(void *ptr, u_int len, int reseed); > int bcmp(const void *, const void *, size_t); Fine. > --- dev/random/randomdev_soft.c.bak 2011-03-02 01:42:19.000000000 +0300 > +++ dev/random/randomdev_soft.c 2012-01-25 17:28:19.000000000 +0400 > @@ -366,6 +366,8 @@ random_yarrow_unblock(void) > selwakeuppri(&random_systat.rsel, PUSER); > wakeup(&random_systat); > } > + if (arc4rand_iniseed_state == 0) > + arc4rand_iniseed_state = 1; > } > > static int I thought you were going to do this as a function? It would be slightly neater to do it that way. > --- libkern/arc4random.c.bak 2008-08-08 01:51:09.000000000 +0400 > +++ libkern/arc4random.c 2012-01-25 17:30:30.000000000 +0400 > @@ -24,6 +24,8 @@ __FBSDID("$FreeBSD: src/sys/libkern/arc4 > #define ARC4_RESEED_SECONDS 300 > #define ARC4_KEYBYTES (256 / 8) > > +int arc4rand_iniseed_state = 0; > + > static u_int8_t arc4_i, arc4_j; > static int arc4_numruns = 0; > static u_int8_t arc4_sbox[256]; > @@ -74,6 +76,8 @@ arc4_randomstir (void) > /* Reset for next reseed cycle. */ > arc4_t_reseed = tv_now.tv_sec + ARC4_RESEED_SECONDS; > arc4_numruns = 0; > + if (arc4rand_iniseed_state == 1) > + arc4rand_iniseed_state = -1; > > /* > * Throw away the first N words of output, as suggested in the > @@ -130,7 +134,7 @@ arc4rand(void *ptr, u_int len, int resee > struct timeval tv; > > getmicrouptime(&tv); > - if (reseed || > + if (reseed || arc4rand_iniseed_state == 1 || > (arc4_numruns > ARC4_RESEED_BYTES) || > (tv.tv_sec > arc4_t_reseed)) > arc4_randomstir(); Looks good! Are you sure this needs no locking or volatile variables? M -- Mark R V Murray Cert APS(Open) Dip Phys(Open) BSc Open(Open) BSc(Hons)(Open) Pi: 132511160 _______________________________________________ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"