v8/test/unittests/heap/cppgc
Michael Lippautz 8bdce52713 Reland "cppgc: Properly clear (Weak)Peristent and WeakMember pointers"
This is a reland of e0c1a349ea

The issue was passing SentinelPointer (== +1) through T*.

The fix is disabling cfi unrelated cast diagnostic for the bottlenecks
(Get()). This means that nullptr is treated the same as
kSentinelPointer.

The alternative would be a DCHECK that Get() does not return
kSentinelPointer and adjusting all Member and Persistent logic that
uses Get() to work on void*. This is quite intrusive as it involves
Swap(), heterogeneous assignments, comparisons, etc.

Original change's description:
> cppgc: Properly clear (Weak)Peristent and WeakMember pointers
>
> The CL addresses two issues with (Weak)Persistent and WeakMember:
> 1. (Weak)Persistent pointers are cleared on heap teardown. Before this
>    CL the pointers would contain stale values which could lead to UAF.
> 2. WeakPersistent and WeakMember are cleared using a combination of
>    internal clearing methods and mutable fields which avoids the use
>    of const_cast<>.
>
> Bug: chromium:1056170
> Change-Id: Ibf2b0f0856771b4f6906608cde13a6d43ebf81f3
> Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2248190
> Reviewed-by: Omer Katz <omerkatz@chromium.org>
> Reviewed-by: Anton Bikineev <bikineev@chromium.org>
> Commit-Queue: Michael Lippautz <mlippautz@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#68394}

Bug: chromium:1056170
Change-Id: I3d74b43464c2973df1956f51b1419d755dd9f519
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2250240
Reviewed-by: Omer Katz <omerkatz@chromium.org>
Reviewed-by: Anton Bikineev <bikineev@chromium.org>
Commit-Queue: Michael Lippautz <mlippautz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#68426}
2020-06-19 08:48:49 +00:00
..
concurrent-sweeper-unittest.cc cppgc: Add initial implementation of young generation 2020-06-17 06:48:10 +00:00
custom-spaces-unittest.cc cppgc: Rework pre-finalizer registration 2020-06-11 20:12:21 +00:00
finalizer-trait-unittest.cc cppgc: Rename unittest files 2020-05-08 08:50:48 +00:00
free-list-unittest.cc cppgc: Rename unittest files 2020-05-08 08:50:48 +00:00
garbage-collected-unittest.cc cppgc: Introduce AllocationHandle 2020-06-10 23:11:20 +00:00
gc-info-unittest.cc cppgc: Add TraceCallback to GCInfo 2020-05-13 23:53:43 +00:00
gc-invoker-unittest.cc [unittests] Convert to the new MOCK_METHOD macro. 2020-06-10 15:50:38 +00:00
heap-growing-unittest.cc [unittests] Convert to the new MOCK_METHOD macro. 2020-06-10 15:50:38 +00:00
heap-object-header-unittest.cc cppgc: Rename unittest files 2020-05-08 08:50:48 +00:00
heap-page-unittest.cc cppgc: Rework pre-finalizer registration 2020-06-11 20:12:21 +00:00
heap-unittest.cc cppgc: Clean up some tests 2020-06-16 10:00:59 +00:00
logging-unittest.cc cppgc: Rename unittest files 2020-05-08 08:50:48 +00:00
marker-unittest.cc Reland "cppgc: Properly clear (Weak)Peristent and WeakMember pointers" 2020-06-19 08:48:49 +00:00
marking-visitor-unittest.cc cppgc: Untangle MarkingVisitor 2020-06-16 15:50:12 +00:00
member-unittest.cc cppgc: Introduce AllocationHandle 2020-06-10 23:11:20 +00:00
minor-gc-unittest.cc cppgc: Add initial implementation of young generation 2020-06-17 06:48:10 +00:00
object-start-bitmap-unittest.cc Fix CountPopulation non-builtin implementation 2020-05-14 14:24:13 +00:00
page-memory-unittest.cc cppgc: Rename unittest files 2020-05-08 08:50:48 +00:00
persistent-unittest.cc Reland "cppgc: Properly clear (Weak)Peristent and WeakMember pointers" 2020-06-19 08:48:49 +00:00
prefinalizer-unittest.cc cppgc: Clean up some tests 2020-06-16 10:00:59 +00:00
run-all-unittests.cc
source-location-unittest.cc cppgc: Rename unittest files 2020-05-08 08:50:48 +00:00
stack-unittest.cc cppgc: Rename unittest files 2020-05-08 08:50:48 +00:00
stats-collector-unittest.cc [unittests] Convert to the new MOCK_METHOD macro. 2020-06-10 15:50:38 +00:00
sweeper-unittest.cc cppgc: Add initial implementation of young generation 2020-06-17 06:48:10 +00:00
test-platform.cc cppgc: Rely on per-heap platform objects 2020-05-28 20:29:55 +00:00
test-platform.h cppgc: Rely on per-heap platform objects 2020-05-28 20:29:55 +00:00
tests.cc cppgc: Introduce HeapBase 2020-06-15 11:03:08 +00:00
tests.h Reland "cppgc: Properly clear (Weak)Peristent and WeakMember pointers" 2020-06-19 08:48:49 +00:00
visitor-unittest.cc cppgc: Introduce AllocationHandle 2020-06-10 23:11:20 +00:00
worklist-unittest.cc cppgc: Rename unittest files 2020-05-08 08:50:48 +00:00
write-barrier-unittest.cc cppgc: Add initial implementation of young generation 2020-06-17 06:48:10 +00:00