diff options
author | Patrick Wildt <patrick@cvs.openbsd.org> | 2021-01-02 17:10:12 +0000 |
---|---|---|
committer | Patrick Wildt <patrick@cvs.openbsd.org> | 2021-01-02 17:10:12 +0000 |
commit | ac63a3868d0079ed93660b89b2c6e6dbf67aea16 (patch) | |
tree | 7f055322abddaf10c9dbd7cbeb91c8f83d78e301 /gnu/llvm/compiler-rt/lib/gwp_asan/random.cpp | |
parent | becf90779831a234f9200480d6009ecb39ebb192 (diff) |
Import compiler-rt 11.0.0 release.
ok kettenis@
Diffstat (limited to 'gnu/llvm/compiler-rt/lib/gwp_asan/random.cpp')
-rw-r--r-- | gnu/llvm/compiler-rt/lib/gwp_asan/random.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/gnu/llvm/compiler-rt/lib/gwp_asan/random.cpp b/gnu/llvm/compiler-rt/lib/gwp_asan/random.cpp index 90493da7e03..2180f920408 100644 --- a/gnu/llvm/compiler-rt/lib/gwp_asan/random.cpp +++ b/gnu/llvm/compiler-rt/lib/gwp_asan/random.cpp @@ -7,14 +7,22 @@ //===----------------------------------------------------------------------===// #include "gwp_asan/random.h" -#include "gwp_asan/guarded_pool_allocator.h" +#include "gwp_asan/common.h" #include <time.h> +// Initialised to a magic constant so that an uninitialised GWP-ASan won't +// regenerate its sample counter for as long as possible. The xorshift32() +// algorithm used below results in getRandomUnsigned32(0xff82eb50) == +// 0xfffffea4. +GWP_ASAN_TLS_INITIAL_EXEC uint32_t RandomState = 0xff82eb50; + namespace gwp_asan { +void initPRNG() { + RandomState = time(nullptr) + getThreadID(); +} + uint32_t getRandomUnsigned32() { - thread_local uint32_t RandomState = - time(nullptr) + GuardedPoolAllocator::getThreadID(); RandomState ^= RandomState << 13; RandomState ^= RandomState >> 17; RandomState ^= RandomState << 5; |