mirror of
https://github.com/systemd/systemd.git
synced 2024-11-01 09:21:26 +03:00
basic: getauxval(AT_RANDOM) is apparently not necessarily aligned
Let's make sure we read it in a way compatible with non-aligned memory. Fixes: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=812928
This commit is contained in:
parent
b430f85f22
commit
ad6b1fa287
@ -95,17 +95,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();
|
||||
|
Loading…
Reference in New Issue
Block a user