Date: Sun, 22 May 2016 12:15:41 +1000 (EST) From: Bruce Evans <brde@optusnet.com.au> To: "Pedro F. Giffuni" <pfg@freebsd.org> Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r300384 - head/sys/compat/ndis Message-ID: <20160522112323.N1388@besplex.bde.org> In-Reply-To: <201605220029.u4M0TPI6050123@repo.freebsd.org> References: <201605220029.u4M0TPI6050123@repo.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, 22 May 2016, Pedro F. Giffuni wrote: > Log: > ndis(4): adjustments for our random() specific implementation. > > - Revert r300377: The implementation claims to return a value > within the range. [1] > - Adjust the value for the case of a zero seed, whihc according > to standards should be equivalent to a seed of value 1. This was already correct. Standards don't say that a seed of 0 for srand() means the same as a seed of 1 passed to srand(). They say that if srand() is not called, then the sequence shall be the same as if it had been called with a seed of 1. This is already implemented by using an internal initial value of the seed that is the result of srand(1). The commit gives the following bugs: - srand() is less random. srand(0) now gives the same sequence as srand(0) - srand(0) is not binary compatible. My previous mail pointed out the version in libc is the kernel version with some bugs fixed. It also has some regressions. In the libc version, srand(seed) sets the internal seed almost directly (it just adds 1 for technical reasons). The kernel version advances the seed through 50 iterations of random(). This doesn't really increase randomness but it makes the linearity relation in the LCG less obvious. Bruce
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20160522112323.N1388>