summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMitch Phillips <mitchphillips@outlook.com>2019-07-16 20:06:17 +0000
committerMitch Phillips <mitchphillips@outlook.com>2019-07-16 20:06:17 +0000
commitb157dcacb5b96fd64900906911832a8ac3bb189e (patch)
treeb43ecaf76ba58d317dd26860af5569c50736f4c7
parent6e0fa292c22cde726b4ddb53cf1fa8c649384030 (diff)
downloadbcm5719-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.h8
-rw-r--r--compiler-rt/lib/gwp_asan/random.cpp4
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;
OpenPOWER on IntegriCloud