On 23.03.2017 07:19, Jonathan Gray wrote:
On Thu, Mar 23, 2017 at 03:24:16PM +1100, Jonathan Gray wrote:
Instead of using using /dev/urandom on Linux and time(NULL) elsewhere
for a seed first use getentropy() for systems that have a kernel
interface to get a seed such as OpenBSD.  This interface is also
present in other systems such as Solaris and even Linux with a recent
version of glibc.

v2: check for/use the different header Solaris and glibc use

Signed-off-by: Jonathan Gray <j...@jsg.id.au>

Even just changing the original to have the following would be an
improvement.

I like this suggestion and the first patch you sent (the getentropy one). Perhaps you can provide a combined patch or a sequence of two patches for that?

Thanks
Nicolai


diff --git a/src/util/rand_xor.c b/src/util/rand_xor.c
index de05fa64b3..9780907368 100644
--- a/src/util/rand_xor.c
+++ b/src/util/rand_xor.c
@@ -22,12 +22,9 @@
  *
  */

-#if defined(__linux__)
-#include <sys/file.h>
+#include <fcntl.h>
 #include <unistd.h>
-#else
 #include <time.h>
-#endif

 #include "rand_xor.h"

@@ -53,29 +50,34 @@ rand_xorshift128plus(uint64_t *seed)
 void
 s_rand_xorshift128plus(uint64_t *seed, bool randomised_seed)
 {
+   time_t now;
+
    if (!randomised_seed)
       goto fixed_seed;

-#if defined(__linux__)
    int fd = open("/dev/urandom", O_RDONLY);
    if (fd < 0)
-      goto fixed_seed;
+      goto time_seed;

    size_t seed_size = sizeof(uint64_t) * 2;
    if (read(fd, seed, seed_size) != seed_size) {
       close(fd);
-      goto fixed_seed;
+      goto time_seed;
    }

    close(fd);
    return;

-#else
+time_seed:
+
+   now = time(NULL);
+   if (now == -1)
+      goto fixed_seed;
+
    seed[0] = 0x3bffb83978e24f88;
-   seed[1] = time(NULL);
+   seed[1] = now;

    return;
-#endif

 fixed_seed:

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev



--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to