diff options
author | Derek Mauro <dmauro@google.com> | 2024-07-01 08:25:45 -0700 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2024-07-01 08:26:37 -0700 |
commit | 57f04ad892729f798da520a80394cf25afe085e8 (patch) | |
tree | 9e4862a61e530542cb15a2eaddf9cb8ab0622d23 | |
parent | 4eb81046b2df1804220ef5af3fda54b6fa614c27 (diff) |
Rollback new poisoned pointer API
This breaks Chromium due to global constructor and incorrectly
assumes page size.
https://github.com/abseil/abseil-cpp/pull/1697
PiperOrigin-RevId: 648377066
Change-Id: I19f8b2655971a0c314091e26e62e10a5a9c46e94
-rw-r--r-- | CMake/AbseilDll.cmake | 2 | ||||
-rw-r--r-- | absl/base/BUILD.bazel | 34 | ||||
-rw-r--r-- | absl/base/CMakeLists.txt | 29 | ||||
-rw-r--r-- | absl/base/internal/poison.cc | 79 | ||||
-rw-r--r-- | absl/base/internal/poison.h | 36 | ||||
-rw-r--r-- | absl/base/internal/poison_test.cc | 39 |
6 files changed, 0 insertions, 219 deletions
diff --git a/CMake/AbseilDll.cmake b/CMake/AbseilDll.cmake index a81cbaf3..c31f2493 100644 --- a/CMake/AbseilDll.cmake +++ b/CMake/AbseilDll.cmake @@ -28,8 +28,6 @@ set(ABSL_INTERNAL_DLL_FILES "base/internal/low_level_scheduling.h" "base/internal/nullability_impl.h" "base/internal/per_thread_tls.h" - "base/internal/poison.cc" - "base/internal/poison.h" "base/prefetch.h" "base/internal/pretty_function.h" "base/internal/raw_logging.cc" diff --git a/absl/base/BUILD.bazel b/absl/base/BUILD.bazel index cfa7eaf5..bc949452 100644 --- a/absl/base/BUILD.bazel +++ b/absl/base/BUILD.bazel @@ -866,40 +866,6 @@ cc_test( ], ) -cc_library( - name = "poison", - srcs = [ - "internal/poison.cc", - ], - hdrs = ["internal/poison.h"], - copts = ABSL_DEFAULT_COPTS, - linkopts = ABSL_DEFAULT_LINKOPTS, - visibility = [ - "//absl:__subpackages__", - ], - deps = [ - ":config", - ":core_headers", - ], -) - -cc_test( - name = "poison_test", - size = "small", - timeout = "short", - srcs = [ - "internal/poison_test.cc", - ], - copts = ABSL_TEST_COPTS, - linkopts = ABSL_DEFAULT_LINKOPTS, - deps = [ - ":config", - ":poison", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", - ], -) - cc_test( name = "unique_small_name_test", size = "small", diff --git a/absl/base/CMakeLists.txt b/absl/base/CMakeLists.txt index 4423dace..e010efec 100644 --- a/absl/base/CMakeLists.txt +++ b/absl/base/CMakeLists.txt @@ -739,32 +739,3 @@ absl_cc_test( absl::optional GTest::gtest_main ) - -absl_cc_library( - NAME - poison - SRCS - "internal/poison.cc" - HDRS - "internal/poison.h" - COPTS - ${ABSL_DEFAULT_COPTS} - LINKOPTS - ${ABSL_DEFAULT_LINKOPTS} - DEPS - absl::config - absl::core_headers -) - -absl_cc_test( - NAME - poison_test - SRCS - "internal/poison_test.cc" - COPTS - ${ABSL_TEST_COPTS} - DEPS - absl::config - absl::poison - GTest::gtest_main -) diff --git a/absl/base/internal/poison.cc b/absl/base/internal/poison.cc deleted file mode 100644 index 721d9144..00000000 --- a/absl/base/internal/poison.cc +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2024 The Abseil Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "absl/base/internal/poison.h" - -#include <atomic> -#include <cstdint> // NOLINT - used in ifdef -#include <cstdlib> - -#include "absl/base/attributes.h" -#include "absl/base/config.h" - -#if defined(ABSL_HAVE_ADDRESS_SANITIZER) -#include <sanitizer/asan_interface.h> -#elif defined(ABSL_HAVE_MEMORY_SANITIZER) -#include <sanitizer/msan_interface.h> -#elif defined(ABSL_HAVE_MMAP) -#include <sys/mman.h> -#elif defined(_MSC_VER) -#include <windows.h> -#endif - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace base_internal { -namespace { -constexpr size_t kPageSize = 1 << 12; -alignas(kPageSize) static char poison_page[kPageSize]; -} // namespace - -std::atomic<void*> poison_data = {&poison_page}; - -namespace { - -#if defined(ABSL_HAVE_ADDRESS_SANITIZER) -void PoisonBlock(void* data) { ASAN_POISON_MEMORY_REGION(data, kPageSize); } -#elif defined(ABSL_HAVE_MEMORY_SANITIZER) -void PoisonBlock(void* data) { __msan_poison(data, kPageSize); } -#elif defined(ABSL_HAVE_MMAP) -void PoisonBlock(void* data) { mprotect(data, kPageSize, PROT_NONE); } -#elif defined(_MSC_VER) -void PoisonBlock(void* data) { - DWORD old_mode = 0; - VirtualProtect(data, kPageSize, PAGE_NOACCESS, &old_mode); -} -#else -void PoisonBlock(void* data) { - // We can't make poisoned memory, so just use a likely bad pointer. - // Pointers are required to have high bits that are all zero or all one for - // certain 64-bit CPUs. This pointer value will hopefully cause a crash on - // dereference and also be clearly recognizable as invalid. - constexpr uint64_t kBadPtr = 0xBAD0BAD0BAD0BAD0; - poison_data = reinterpret_cast<void*>(static_cast<uintptr_t>(kBadPtr)); -} -#endif - -void* InitializePoisonedPointer() { - PoisonBlock(&poison_page); - return &poison_page; -} - -} // namespace - -ABSL_ATTRIBUTE_UNUSED void* force_initialize = InitializePoisonedPointer(); - -} // namespace base_internal -ABSL_NAMESPACE_END -} // namespace absl diff --git a/absl/base/internal/poison.h b/absl/base/internal/poison.h deleted file mode 100644 index aac1506a..00000000 --- a/absl/base/internal/poison.h +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2024 The Abseil Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ABSL_BASE_INTERNAL_POISON_H_ -#define ABSL_BASE_INTERNAL_POISON_H_ - -#include <atomic> - -#include "absl/base/config.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace base_internal { - -extern std::atomic<void*> poison_data; - -inline void* get_poisoned_pointer() { - return poison_data.load(std::memory_order_relaxed); -} - -} // namespace base_internal -ABSL_NAMESPACE_END -} // namespace absl - -#endif // ABSL_BASE_INTERNAL_POISON_H_ diff --git a/absl/base/internal/poison_test.cc b/absl/base/internal/poison_test.cc deleted file mode 100644 index ee72c177..00000000 --- a/absl/base/internal/poison_test.cc +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2024 The Abseil Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "absl/base/internal/poison.h" - -#include <iostream> - -#include "gtest/gtest.h" -#include "absl/base/config.h" - -namespace absl { -ABSL_NAMESPACE_BEGIN -namespace base_internal { -namespace { - -TEST(PoisonTest, CrashesOnDereference) { -#ifdef __ANDROID__ - GTEST_SKIP() << "On Android, poisoned pointer dereference times out instead " - "of crashing."; -#endif - void* poisoned_ptr = get_poisoned_pointer(); - EXPECT_DEATH_IF_SUPPORTED(std::cout << *static_cast<int*>(poisoned_ptr), ""); -} - -} // namespace -} // namespace base_internal -ABSL_NAMESPACE_END -} // namespace absl |