1 // Copyright 2023 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "partition_alloc/pointers/raw_ptr_hookable_impl.h"
6
7 #include <atomic>
8 #include <cstdint>
9
10 namespace base::internal {
11
12 namespace {
13
DefaultWrapPtrHook(uintptr_t address)14 void DefaultWrapPtrHook(uintptr_t address) {}
DefaultReleaseWrappedPtrHook(uintptr_t address)15 void DefaultReleaseWrappedPtrHook(uintptr_t address) {}
DefaultUnwrapForDereferenceHook(uintptr_t address)16 void DefaultUnwrapForDereferenceHook(uintptr_t address) {}
DefaultUnwrapForExtractionHook(uintptr_t address)17 void DefaultUnwrapForExtractionHook(uintptr_t address) {}
DefaultUnwrapForComparisonHook(uintptr_t address)18 void DefaultUnwrapForComparisonHook(uintptr_t address) {}
DefaultAdvanceHook(uintptr_t old_address,uintptr_t new_address)19 void DefaultAdvanceHook(uintptr_t old_address, uintptr_t new_address) {}
DefaultDuplicateHook(uintptr_t address)20 void DefaultDuplicateHook(uintptr_t address) {}
DefaultWrapPtrForDuplicationHook(uintptr_t address)21 void DefaultWrapPtrForDuplicationHook(uintptr_t address) {}
DefaultUnsafelyUnwrapForDuplicationHook(uintptr_t address)22 void DefaultUnsafelyUnwrapForDuplicationHook(uintptr_t address) {}
23
24 constexpr RawPtrHooks default_hooks = {
25 DefaultWrapPtrHook,
26 DefaultReleaseWrappedPtrHook,
27 DefaultUnwrapForDereferenceHook,
28 DefaultUnwrapForExtractionHook,
29 DefaultUnwrapForComparisonHook,
30 DefaultAdvanceHook,
31 DefaultDuplicateHook,
32 DefaultWrapPtrForDuplicationHook,
33 DefaultUnsafelyUnwrapForDuplicationHook,
34 };
35
36 } // namespace
37
38 std::atomic<const RawPtrHooks*> g_hooks{&default_hooks};
39
GetRawPtrHooks()40 const RawPtrHooks* GetRawPtrHooks() {
41 return g_hooks.load(std::memory_order_relaxed);
42 }
43
InstallRawPtrHooks(const RawPtrHooks * hooks)44 void InstallRawPtrHooks(const RawPtrHooks* hooks) {
45 g_hooks.store(hooks, std::memory_order_relaxed);
46 }
47
ResetRawPtrHooks()48 void ResetRawPtrHooks() {
49 InstallRawPtrHooks(&default_hooks);
50 }
51
52 } // namespace base::internal
53