X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fbasic%2Frandom-util.c;fp=src%2Fbasic%2Frandom-util.c;h=34cc7cbcee32fc3008c1a3fcba5ed1055ca8520c;hb=9e830df83c27d0d757df16904ec23b3844da2733;hp=2f5c16e2afbdc7fc3230d7111007960ce8e7b996;hpb=03ecdfcc404d4066dfae119d3ce27266fc0bfa88;p=elogind.git diff --git a/src/basic/random-util.c b/src/basic/random-util.c index 2f5c16e2a..34cc7cbce 100644 --- a/src/basic/random-util.c +++ b/src/basic/random-util.c @@ -94,17 +94,18 @@ void initialize_srand(void) { if (srand_called) return; - x = 0; - #ifdef HAVE_SYS_AUXV_H - /* The kernel provides us with a bit of entropy in auxv, so - * let's try to make use of that to seed the pseudo-random - * generator. It's better than nothing... */ + /* The kernel provides us with 16 bytes of entropy in auxv, so let's try to make use of that to seed the + * pseudo-random generator. It's better than nothing... */ auxv = (void*) getauxval(AT_RANDOM); - if (auxv) - x ^= *(unsigned*) auxv; + if (auxv) { + assert_cc(sizeof(x) < 16); + memcpy(&x, auxv, sizeof(x)); + } else #endif + x = 0; + x ^= (unsigned) now(CLOCK_REALTIME); x ^= (unsigned) gettid();