summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Derek Mauro <dmauro@google.com>2024-07-01 08:25:45 -0700
committerGravatar Copybara-Service <copybara-worker@google.com>2024-07-01 08:26:37 -0700
commit57f04ad892729f798da520a80394cf25afe085e8 (patch)
tree9e4862a61e530542cb15a2eaddf9cb8ab0622d23
parent4eb81046b2df1804220ef5af3fda54b6fa614c27 (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.cmake2
-rw-r--r--absl/base/BUILD.bazel34
-rw-r--r--absl/base/CMakeLists.txt29
-rw-r--r--absl/base/internal/poison.cc79
-rw-r--r--absl/base/internal/poison.h36
-rw-r--r--absl/base/internal/poison_test.cc39
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