diff options
-rw-r--r-- | compiler-rt/lib/hwasan/hwasan_flags.inc | 4 | ||||
-rw-r--r-- | compiler-rt/lib/hwasan/hwasan_thread.cc | 16 | ||||
-rw-r--r-- | compiler-rt/test/hwasan/lit.cfg | 2 |
3 files changed, 15 insertions, 7 deletions
diff --git a/compiler-rt/lib/hwasan/hwasan_flags.inc b/compiler-rt/lib/hwasan/hwasan_flags.inc index a2cb701ae93..c45781168d6 100644 --- a/compiler-rt/lib/hwasan/hwasan_flags.inc +++ b/compiler-rt/lib/hwasan/hwasan_flags.inc @@ -27,3 +27,7 @@ HWASAN_FLAG(bool, atexit, false, "") // Test only flag to disable malloc/realloc/free memory tagging on startup. // Tagging can be reenabled with __hwasan_enable_allocator_tagging(). HWASAN_FLAG(bool, disable_allocator_tagging, false, "") + +// If false, use simple increment of a thread local counter to generate new +// tags. +HWASAN_FLAG(bool, random_tags, true, "") diff --git a/compiler-rt/lib/hwasan/hwasan_thread.cc b/compiler-rt/lib/hwasan/hwasan_thread.cc index ad2afb29939..75b831b3192 100644 --- a/compiler-rt/lib/hwasan/hwasan_thread.cc +++ b/compiler-rt/lib/hwasan/hwasan_thread.cc @@ -29,7 +29,7 @@ HwasanThread *HwasanThread::Create(thread_callback_t start_routine, thread->start_routine_ = start_routine; thread->arg_ = arg; thread->destructor_iterations_ = GetPthreadDestructorIterations(); - thread->random_state_ = RandomSeed(); + thread->random_state_ = flags()->random_tags ? RandomSeed() : 0; return thread; } @@ -97,11 +97,15 @@ static u32 xorshift(u32 state) { tag_t HwasanThread::GenerateRandomTag() { tag_t tag; do { - if (!random_buffer_) - random_buffer_ = random_state_ = xorshift(random_state_); - CHECK(random_buffer_); - tag = random_buffer_ & 0xFF; - random_buffer_ >>= 8; + if (flags()->random_tags) { + if (!random_buffer_) + random_buffer_ = random_state_ = xorshift(random_state_); + CHECK(random_buffer_); + tag = random_buffer_ & 0xFF; + random_buffer_ >>= 8; + } else { + tag = random_state_ = (random_state_ + 1) & 0xFF; + } } while (!tag); return tag; } diff --git a/compiler-rt/test/hwasan/lit.cfg b/compiler-rt/test/hwasan/lit.cfg index 4f099af5b7f..07e11f75ec8 100644 --- a/compiler-rt/test/hwasan/lit.cfg +++ b/compiler-rt/test/hwasan/lit.cfg @@ -18,7 +18,7 @@ def build_invocation(compile_flags): config.substitutions.append( ("%clang_hwasan ", build_invocation(clang_hwasan_cflags)) ) config.substitutions.append( ("%clangxx_hwasan ", build_invocation(clang_hwasan_cxxflags)) ) -default_hwasan_opts_str = ':'.join(['disable_allocator_tagging=1'] + config.default_sanitizer_opts) +default_hwasan_opts_str = ':'.join(['disable_allocator_tagging=1', 'random_tags=0'] + config.default_sanitizer_opts) if default_hwasan_opts_str: config.environment['HWASAN_OPTIONS'] = default_hwasan_opts_str default_hwasan_opts_str += ':' |