// Copyright 2023 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef V8_SANDBOX_TRUSTED_POINTER_TABLE_H_ #define V8_SANDBOX_TRUSTED_POINTER_TABLE_H_ #include "include/v8config.h" #include "src/base/atomicops.h" #include "src/base/memory.h" #include "src/base/platform/mutex.h" #include "src/common/globals.h" #include "src/sandbox/external-entity-table.h" #include "src/sandbox/indirect-pointer-tag.h" #include "src/sandbox/tagged-payload.h" #ifdef V8_ENABLE_SANDBOX namespace v8 { namespace internal { class Isolate; class Counters; /** * The entries of a TrustedPointerTable. * * Each entry contains an (absolute) pointer to a TrustedObject. */ struct TrustedPointerTableEntry { … }; static_assert …; /** * A table containing (full) pointers to TrustedObjects. * * When the sandbox is enabled, a trusted pointer table (TPT) is used to safely * reference trusted heap objects located in one of the trusted spaces outside * of the sandbox. The TPT guarantees that every access to an object via a * trusted pointer (an index into the table) either results in an invalid * pointer or a valid pointer to a valid (live) object of the expected type. * * The TPT is very similar to the external pointer table (EPT), but is used to * reference V8 HeapObjects (located inside a V8 heap) rather than C++ objects * (typically located on one of the system heaps). As such, the garbage * collector needs to be aware of the table indirection. */ class V8_EXPORT_PRIVATE TrustedPointerTable : public ExternalEntityTable<TrustedPointerTableEntry, kTrustedPointerTableReservationSize> { … }; static_assert …; } // namespace internal } // namespace v8 #endif // V8_ENABLE_SANDBOX #endif // V8_SANDBOX_TRUSTED_POINTER_TABLE_H_