[GWP-ASan] Allow late initialisation if single-threaded.
Summary:
This patch allows for late initialisation of the GWP-ASan allocator. Previously, if late initialisation occurred, the sample counter was never updated, meaning we would end up having to wait for 2^32 allocations before getting a sampled allocation.
Now, we initialise the sampling mechanism in init() as well. We require init() to be called single-threaded, so this isn't a problem.
Reviewers: eugenis
Reviewed By: eugenis
Subscribers: merge_guards_bot, mgorny, #sanitizers, llvm-commits, cferris
Tags: #sanitizers, #llvm
Differential Revision: https://reviews.llvm.org/D73896
2020-02-04 04:25:51 +08:00
|
|
|
//===-- late_init.cpp -------------------------------------------*- C++ -*-===//
|
|
|
|
//
|
|
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
#include "gwp_asan/guarded_pool_allocator.h"
|
|
|
|
#include "gwp_asan/options.h"
|
2020-11-17 07:34:14 +08:00
|
|
|
#include "gwp_asan/tests/harness.h"
|
[GWP-ASan] Allow late initialisation if single-threaded.
Summary:
This patch allows for late initialisation of the GWP-ASan allocator. Previously, if late initialisation occurred, the sample counter was never updated, meaning we would end up having to wait for 2^32 allocations before getting a sampled allocation.
Now, we initialise the sampling mechanism in init() as well. We require init() to be called single-threaded, so this isn't a problem.
Reviewers: eugenis
Reviewed By: eugenis
Subscribers: merge_guards_bot, mgorny, #sanitizers, llvm-commits, cferris
Tags: #sanitizers, #llvm
Differential Revision: https://reviews.llvm.org/D73896
2020-02-04 04:25:51 +08:00
|
|
|
|
|
|
|
TEST(LateInit, CheckLateInitIsOK) {
|
|
|
|
gwp_asan::GuardedPoolAllocator GPA;
|
|
|
|
|
|
|
|
for (size_t i = 0; i < 0x100; ++i)
|
|
|
|
EXPECT_FALSE(GPA.shouldSample());
|
|
|
|
|
|
|
|
gwp_asan::options::Options Opts;
|
|
|
|
Opts.Enabled = true;
|
|
|
|
Opts.SampleRate = 1;
|
|
|
|
|
|
|
|
GPA.init(Opts);
|
|
|
|
EXPECT_TRUE(GPA.shouldSample());
|
|
|
|
}
|