diff options
author | Mike Gilbert <floppym@gentoo.org> | 2018-11-08 15:47:16 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2018-11-10 14:56:53 +0100 |
commit | 33dbab6fde5423ce61b5544ca49afa13495477a8 (patch) | |
tree | be46001261b2f1786d0706589a36df5031296980 /src/basic/random-util.c | |
parent | Merge pull request #10717 from yuwata/fix-oss-fuzz-11324 (diff) | |
download | systemd-33dbab6fde5423ce61b5544ca49afa13495477a8.tar.xz systemd-33dbab6fde5423ce61b5544ca49afa13495477a8.zip |
random-util: allow RDRAND to be used in 32-bit x86 binaries
Rename rdrand64 to rdrand, and switch from uint64_t to unsigned long.
This produces code that will compile/assemble on both x86-64 and x86-32.
This could be useful when running a 32-bit copy of systemd on a modern
Intel processor.
RDRAND is inherently arch-specific, so relying on the compiler-defined
'long' type seems reasonable.
Diffstat (limited to 'src/basic/random-util.c')
-rw-r--r-- | src/basic/random-util.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/basic/random-util.c b/src/basic/random-util.c index c17c09765b..4a36ad5119 100644 --- a/src/basic/random-util.c +++ b/src/basic/random-util.c @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1+ */ -#ifdef __x86_64__ +#if defined(__i386__) || defined(__x86_64__) #include <cpuid.h> #endif @@ -34,9 +34,9 @@ #include <sanitizer/msan_interface.h> #endif -int rdrand64(uint64_t *ret) { +int rdrand(unsigned long *ret) { -#ifdef __x86_64__ +#if defined(__i386__) || defined(__x86_64__) static int have_rdrand = -1; unsigned char err; @@ -95,10 +95,10 @@ int genuine_random_bytes(void *p, size_t n, RandomFlags flags) { * allows us too, since this way we won't drain the kernel randomness pool if we don't need it, as the * pool's entropy is scarce. */ for (;;) { - uint64_t u; + unsigned long u; size_t m; - if (rdrand64(&u) < 0) { + if (rdrand(&u) < 0) { if (got_some && FLAGS_SET(flags, RANDOM_EXTEND_WITH_PSEUDO)) { /* Fill in the remaining bytes using pseudo-random values */ pseudo_random_bytes(p, n); @@ -198,7 +198,7 @@ void initialize_srand(void) { #if HAVE_SYS_AUXV_H const void *auxv; #endif - uint64_t k; + unsigned long k; if (srand_called) return; @@ -219,7 +219,7 @@ void initialize_srand(void) { x ^= (unsigned) now(CLOCK_REALTIME); x ^= (unsigned) gettid(); - if (rdrand64(&k) >= 0) + if (rdrand(&k) >= 0) x ^= (unsigned) k; srand(x); |