From 22c91ae0bb3a9b213e2bbb342f3e4ade85d702ec Mon Sep 17 00:00:00 2001 From: Christopher Ferris Date: Mon, 10 Nov 2025 16:22:27 -0800 Subject: [PATCH] Revert "[scudo] Small cleanup of memory tagging code. (#166860)" This reverts commit 046ae855360614c5980d0ced0c55b5de507bd9ad. --- compiler-rt/lib/scudo/standalone/combined.h | 3 ++- compiler-rt/lib/scudo/standalone/memtag.h | 7 ++++--- compiler-rt/lib/scudo/standalone/tests/memtag_test.cpp | 1 + compiler-rt/lib/scudo/standalone/tests/secondary_test.cpp | 4 +++- .../lib/scudo/standalone/tests/wrappers_cpp_test.cpp | 3 ++- 5 files changed, 12 insertions(+), 6 deletions(-) diff --git a/compiler-rt/lib/scudo/standalone/combined.h b/compiler-rt/lib/scudo/standalone/combined.h index 2d0f4f53d2ac5..ffe9554203241 100644 --- a/compiler-rt/lib/scudo/standalone/combined.h +++ b/compiler-rt/lib/scudo/standalone/combined.h @@ -171,7 +171,8 @@ class Allocator { Primary.Options.set(OptionBit::DeallocTypeMismatch); if (getFlags()->delete_size_mismatch) Primary.Options.set(OptionBit::DeleteSizeMismatch); - if (systemSupportsMemoryTagging()) + if (allocatorSupportsMemoryTagging() && + systemSupportsMemoryTagging()) Primary.Options.set(OptionBit::UseMemoryTagging); QuarantineMaxChunkSize = diff --git a/compiler-rt/lib/scudo/standalone/memtag.h b/compiler-rt/lib/scudo/standalone/memtag.h index 52897b3dca6ae..83ebe676433eb 100644 --- a/compiler-rt/lib/scudo/standalone/memtag.h +++ b/compiler-rt/lib/scudo/standalone/memtag.h @@ -66,8 +66,7 @@ inline bool systemSupportsMemoryTagging() { #ifndef HWCAP2_MTE #define HWCAP2_MTE (1 << 18) #endif - static bool SupportsMemoryTagging = getauxval(AT_HWCAP2) & HWCAP2_MTE; - return SupportsMemoryTagging; + return getauxval(AT_HWCAP2) & HWCAP2_MTE; } inline bool systemDetectsMemoryTagFaultsTestOnly() { @@ -262,7 +261,9 @@ inline uptr loadTag(uptr Ptr) { #else -inline bool systemSupportsMemoryTagging() { return false; } +inline NORETURN bool systemSupportsMemoryTagging() { + UNREACHABLE("memory tagging not supported"); +} inline NORETURN bool systemDetectsMemoryTagFaultsTestOnly() { UNREACHABLE("memory tagging not supported"); diff --git a/compiler-rt/lib/scudo/standalone/tests/memtag_test.cpp b/compiler-rt/lib/scudo/standalone/tests/memtag_test.cpp index d0d93316f212e..09093e11452dd 100644 --- a/compiler-rt/lib/scudo/standalone/tests/memtag_test.cpp +++ b/compiler-rt/lib/scudo/standalone/tests/memtag_test.cpp @@ -28,6 +28,7 @@ TEST(MemtagBasicDeathTest, Unsupported) { EXPECT_DEATH(untagPointer((uptr)0), "not supported"); EXPECT_DEATH(extractTag((uptr)0), "not supported"); + EXPECT_DEATH(systemSupportsMemoryTagging(), "not supported"); EXPECT_DEATH(systemDetectsMemoryTagFaultsTestOnly(), "not supported"); EXPECT_DEATH(enableSystemMemoryTaggingTestOnly(), "not supported"); diff --git a/compiler-rt/lib/scudo/standalone/tests/secondary_test.cpp b/compiler-rt/lib/scudo/standalone/tests/secondary_test.cpp index 8741c8299b57c..855a3e6e6109f 100644 --- a/compiler-rt/lib/scudo/standalone/tests/secondary_test.cpp +++ b/compiler-rt/lib/scudo/standalone/tests/secondary_test.cpp @@ -27,7 +27,9 @@ const scudo::uptr PageSize = scudo::getPageSizeCached(); template static scudo::Options getOptionsForConfig() { - if (!scudo::systemSupportsMemoryTagging()) + if (!Config::getMaySupportMemoryTagging() || + !scudo::archSupportsMemoryTagging() || + !scudo::systemSupportsMemoryTagging()) return {}; scudo::AtomicOptions AO; AO.set(scudo::OptionBit::UseMemoryTagging); diff --git a/compiler-rt/lib/scudo/standalone/tests/wrappers_cpp_test.cpp b/compiler-rt/lib/scudo/standalone/tests/wrappers_cpp_test.cpp index 84359251a02aa..c802ed22fbad0 100644 --- a/compiler-rt/lib/scudo/standalone/tests/wrappers_cpp_test.cpp +++ b/compiler-rt/lib/scudo/standalone/tests/wrappers_cpp_test.cpp @@ -187,7 +187,8 @@ TEST_F(ScudoWrappersCppTest, ThreadedNew) { // TODO: Investigate why libc sometimes crashes with tag missmatch in // __pthread_clockjoin_ex. std::unique_ptr NoTags; - if (!SCUDO_ANDROID && scudo::systemSupportsMemoryTagging()) + if (!SCUDO_ANDROID && scudo::archSupportsMemoryTagging() && + scudo::systemSupportsMemoryTagging()) NoTags = std::make_unique(); Ready = false;