diff options
author | Mitch Phillips <mitchphillips@outlook.com> | 2019-07-16 20:06:17 +0000 |
---|---|---|
committer | Mitch Phillips <mitchphillips@outlook.com> | 2019-07-16 20:06:17 +0000 |
commit | b157dcacb5b96fd64900906911832a8ac3bb189e (patch) | |
tree | b43ecaf76ba58d317dd26860af5569c50736f4c7 | |
parent | 6e0fa292c22cde726b4ddb53cf1fa8c649384030 (diff) | |
download | bcm5719-llvm-b157dcacb5b96fd64900906911832a8ac3bb189e.tar.gz bcm5719-llvm-b157dcacb5b96fd64900906911832a8ac3bb189e.zip |
[GWP-ASan] Add thread ID to PRNG seed.
Summary:
Adds thread ID to PRNG seed for increased entropy. In particular, this allows
multiple runs in quick succession that will have different PRNG seeds, allowing
for better demos/testing.
Reviewers: kcc
Reviewed By: kcc
Subscribers: kubamracek, #sanitizers, llvm-commits
Tags: #sanitizers, #llvm
Differential Revision: https://reviews.llvm.org/D64453
llvm-svn: 366253
-rw-r--r-- | compiler-rt/lib/gwp_asan/guarded_pool_allocator.h | 8 | ||||
-rw-r--r-- | compiler-rt/lib/gwp_asan/random.cpp | 4 |
2 files changed, 7 insertions, 5 deletions
diff --git a/compiler-rt/lib/gwp_asan/guarded_pool_allocator.h b/compiler-rt/lib/gwp_asan/guarded_pool_allocator.h index 400d50c0b0b..28a41110fae 100644 --- a/compiler-rt/lib/gwp_asan/guarded_pool_allocator.h +++ b/compiler-rt/lib/gwp_asan/guarded_pool_allocator.h @@ -132,6 +132,10 @@ public: // occur. static void reportError(uintptr_t AccessPtr, Error E = Error::UNKNOWN); + // Get the current thread ID, or kInvalidThreadID if failure. Note: This + // implementation is platform-specific. + static uint64_t getThreadID(); + private: static constexpr size_t kInvalidSlotID = SIZE_MAX; @@ -146,10 +150,6 @@ private: void markReadWrite(void *Ptr, size_t Size) const; void markInaccessible(void *Ptr, size_t Size) const; - // Get the current thread ID, or kInvalidThreadID if failure. Note: This - // implementation is platform-specific. - static uint64_t getThreadID(); - // Get the page size from the platform-specific implementation. Only needs to // be called once, and the result should be cached in PageSize in this class. static size_t getPlatformPageSize(); diff --git a/compiler-rt/lib/gwp_asan/random.cpp b/compiler-rt/lib/gwp_asan/random.cpp index 67f4a22ef95..90493da7e03 100644 --- a/compiler-rt/lib/gwp_asan/random.cpp +++ b/compiler-rt/lib/gwp_asan/random.cpp @@ -7,12 +7,14 @@ //===----------------------------------------------------------------------===// #include "gwp_asan/random.h" +#include "gwp_asan/guarded_pool_allocator.h" #include <time.h> namespace gwp_asan { uint32_t getRandomUnsigned32() { - thread_local uint32_t RandomState = static_cast<uint64_t>(time(nullptr)); + thread_local uint32_t RandomState = + time(nullptr) + GuardedPoolAllocator::getThreadID(); RandomState ^= RandomState << 13; RandomState ^= RandomState >> 17; RandomState ^= RandomState << 5; |