forked from OSchip/llvm-project
Revert "[Scudo] Use GWP-ASan's aligned allocations and fixup postalloc hooks."
This reverts commit a683abe5c0
.
Broke the upstream buildbots:
https://lab.llvm.org/buildbot/#/builders/37/builds/3731/steps/16/logs/stdio
This commit is contained in:
parent
38959c4624
commit
643ccf6e4b
|
@ -303,6 +303,13 @@ struct Allocator {
|
|||
bool ForceZeroContents = false) {
|
||||
initThreadMaybe();
|
||||
|
||||
#ifdef GWP_ASAN_HOOKS
|
||||
if (UNLIKELY(GuardedAlloc.shouldSample())) {
|
||||
if (void *Ptr = GuardedAlloc.allocate(Size))
|
||||
return Ptr;
|
||||
}
|
||||
#endif // GWP_ASAN_HOOKS
|
||||
|
||||
if (UNLIKELY(Alignment > MaxAlignment)) {
|
||||
if (AllocatorMayReturnNull())
|
||||
return nullptr;
|
||||
|
@ -311,16 +318,6 @@ struct Allocator {
|
|||
if (UNLIKELY(Alignment < MinAlignment))
|
||||
Alignment = MinAlignment;
|
||||
|
||||
#ifdef GWP_ASAN_HOOKS
|
||||
if (UNLIKELY(GuardedAlloc.shouldSample())) {
|
||||
if (void *Ptr = GuardedAlloc.allocate(Size, Alignment)) {
|
||||
if (SCUDO_CAN_USE_HOOKS && &__sanitizer_malloc_hook)
|
||||
__sanitizer_malloc_hook(Ptr, Size);
|
||||
return Ptr;
|
||||
}
|
||||
}
|
||||
#endif // GWP_ASAN_HOOKS
|
||||
|
||||
const uptr NeededSize = RoundUpTo(Size ? Size : 1, MinAlignment) +
|
||||
Chunk::getHeaderSize();
|
||||
const uptr AlignedSize = (Alignment > MinAlignment) ?
|
||||
|
|
|
@ -290,7 +290,19 @@ public:
|
|||
bool ZeroContents = false) {
|
||||
initThreadMaybe();
|
||||
|
||||
#ifdef GWP_ASAN_HOOKS
|
||||
if (UNLIKELY(GuardedAlloc.shouldSample())) {
|
||||
if (void *Ptr = GuardedAlloc.allocate(roundUpTo(Size, Alignment)))
|
||||
return Ptr;
|
||||
}
|
||||
#endif // GWP_ASAN_HOOKS
|
||||
|
||||
const Options Options = Primary.Options.load();
|
||||
const FillContentsMode FillContents = ZeroContents ? ZeroFill
|
||||
: TSDRegistry.getDisableMemInit()
|
||||
? NoFill
|
||||
: Options.getFillContentsMode();
|
||||
|
||||
if (UNLIKELY(Alignment > MaxAlignment)) {
|
||||
if (Options.get(OptionBit::MayReturnNull))
|
||||
return nullptr;
|
||||
|
@ -299,22 +311,6 @@ public:
|
|||
if (Alignment < MinAlignment)
|
||||
Alignment = MinAlignment;
|
||||
|
||||
#ifdef GWP_ASAN_HOOKS
|
||||
if (UNLIKELY(GuardedAlloc.shouldSample())) {
|
||||
if (void *Ptr = GuardedAlloc.allocate(Size, Alignment)) {
|
||||
if (UNLIKELY(&__scudo_allocate_hook))
|
||||
__scudo_allocate_hook(Ptr, Size);
|
||||
Stats.add(StatAllocated, Size);
|
||||
return Ptr;
|
||||
}
|
||||
}
|
||||
#endif // GWP_ASAN_HOOKS
|
||||
|
||||
const FillContentsMode FillContents = ZeroContents ? ZeroFill
|
||||
: TSDRegistry.getDisableMemInit()
|
||||
? NoFill
|
||||
: Options.getFillContentsMode();
|
||||
|
||||
// If the requested size happens to be 0 (more common than you might think),
|
||||
// allocate MinAlignment bytes on top of the header. Then add the extra
|
||||
// bytes required to fulfill the alignment requirements: we allocate enough
|
||||
|
@ -507,20 +503,18 @@ public:
|
|||
// being destroyed properly. Any other heap operation will do a full init.
|
||||
initThreadMaybe(/*MinimalInit=*/true);
|
||||
|
||||
#ifdef GWP_ASAN_HOOKS
|
||||
if (UNLIKELY(GuardedAlloc.pointerIsMine(Ptr))) {
|
||||
GuardedAlloc.deallocate(Ptr);
|
||||
return;
|
||||
}
|
||||
#endif // GWP_ASAN_HOOKS
|
||||
|
||||
if (UNLIKELY(&__scudo_deallocate_hook))
|
||||
__scudo_deallocate_hook(Ptr);
|
||||
|
||||
if (UNLIKELY(!Ptr))
|
||||
return;
|
||||
|
||||
#ifdef GWP_ASAN_HOOKS
|
||||
if (UNLIKELY(GuardedAlloc.pointerIsMine(Ptr))) {
|
||||
GuardedAlloc.deallocate(Ptr);
|
||||
Stats.add(StatFree, GuardedAlloc.getSize(Ptr));
|
||||
return;
|
||||
}
|
||||
#endif // GWP_ASAN_HOOKS
|
||||
|
||||
if (UNLIKELY(!isAligned(reinterpret_cast<uptr>(Ptr), MinAlignment)))
|
||||
reportMisalignedPointer(AllocatorAction::Deallocating, Ptr);
|
||||
|
||||
|
@ -577,7 +571,6 @@ public:
|
|||
if (NewPtr)
|
||||
memcpy(NewPtr, OldPtr, (NewSize < OldSize) ? NewSize : OldSize);
|
||||
GuardedAlloc.deallocate(OldPtr);
|
||||
Stats.add(StatFree, OldSize);
|
||||
return NewPtr;
|
||||
}
|
||||
#endif // GWP_ASAN_HOOKS
|
||||
|
|
|
@ -94,18 +94,6 @@ TEST(ScudoWrappersCTest, Calloc) {
|
|||
EXPECT_EQ(errno, ENOMEM);
|
||||
}
|
||||
|
||||
TEST(ScudoWrappersCTest, SmallAlign) {
|
||||
void *P;
|
||||
for (size_t Size = 1; Size <= 0x10000; Size <<= 1) {
|
||||
for (size_t Align = 1; Align <= 0x10000; Align <<= 1) {
|
||||
for (size_t Count = 0; Count < 3; ++Count) {
|
||||
P = memalign(Align, Size);
|
||||
EXPECT_TRUE(reinterpret_cast<uintptr_t>(P) % Align == 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TEST(ScudoWrappersCTest, Memalign) {
|
||||
void *P;
|
||||
for (size_t I = FIRST_32_SECOND_64(2U, 3U); I <= 18U; I++) {
|
||||
|
|
|
@ -66,10 +66,6 @@ public:
|
|||
};
|
||||
|
||||
TEST(ScudoWrappersCppTest, New) {
|
||||
if (getenv("SKIP_TYPE_MISMATCH")) {
|
||||
printf("Skipped type mismatch tests.\n");
|
||||
return;
|
||||
}
|
||||
testCxxNew<bool>();
|
||||
testCxxNew<uint8_t>();
|
||||
testCxxNew<uint16_t>();
|
||||
|
|
|
@ -4,12 +4,6 @@ if(COMPILER_RT_INCLUDE_TESTS AND COMPILER_RT_HAS_SCUDO_STANDALONE)
|
|||
${CMAKE_CURRENT_BINARY_DIR}/unit/lit.site.cfg.py)
|
||||
list(APPEND SCUDO_STANDALONE_TEST_DEPS ScudoUnitTests)
|
||||
list(APPEND SCUDO_STANDALONE_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/unit)
|
||||
if (COMPILER_RT_HAS_GWP_ASAN)
|
||||
configure_lit_site_cfg(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/unit/gwp_asan/lit.site.cfg.py.in
|
||||
${CMAKE_CURRENT_BINARY_DIR}/unit/gwp_asan/lit.site.cfg.py)
|
||||
list(APPEND SCUDO_STANDALONE_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/unit/gwp_asan)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
add_lit_testsuite(check-scudo_standalone
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
@LIT_SITE_CFG_IN_HEADER@
|
||||
|
||||
# Load common config for all compiler-rt unit tests.
|
||||
lit_config.load_config(config, "@COMPILER_RT_BINARY_DIR@/unittests/lit.common.unit.configured")
|
||||
|
||||
# Setup config name.
|
||||
config.name = 'ScudoStandalone-Unit-GwpAsanTorture'
|
||||
|
||||
# Setup test source and exec root.
|
||||
# For unit tests, we define it as build directory with unit tests.
|
||||
config.test_exec_root = "@COMPILER_RT_BINARY_DIR@/lib/scudo/standalone/tests"
|
||||
config.test_source_root = config.test_exec_root
|
||||
|
||||
# This is a second run of the Scudo test suite, but this time under a "torture"
|
||||
# GWP-ASan mode. Every allocation that can go to GWP-ASan, should go to
|
||||
# GWP-ASan. This ensures that GWP-ASan allocations meet the same testing
|
||||
# requirements as the native Scudo allocations. Reserves 409MiB of vaddr space
|
||||
# for the guarded pool, and this should be paged in on demand. If necessary (for
|
||||
# 32-bit or places where kernel commits immediately), this could possibly be
|
||||
# reduced.
|
||||
config.environment['SCUDO_OPTIONS'] = 'GWP_ASAN_SampleRate=1:GWP_ASAN_MaxSimultaneousAllocations=100000'
|
||||
|
||||
# GWP-ASan doesn't support malloc-type mismatch.
|
||||
config.environment['SKIP_TYPE_MISMATCH'] = '1'
|
Loading…
Reference in New Issue