> A memory ordering race on weak memory architectures (like ARM64) between
> mutator allocations and the concurrent marker could lead to an integer
> underflow in ObjectStartBitmap::FindHeader. This happened because the
> concurrent marker could observe a new pointer in a cppgc::Member before
> the corresponding bit was set in the ObjectStartBitmap.
>
> The CL fixes it by using a seq-cst OSB write. As a drive-by, it fixes
> the issue with conservative object lookup.
>
> Bug: 511218177
> Change-Id: I89e8fa26966daf755380719277be0a1656268940
> Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/7840600
> Auto-Submit: Anton Bikineev <biki...@chromium.org>
> Commit-Queue: Michael Lippautz <mlip...@chromium.org>
> Reviewed-by: Michael Lippautz <mlip...@chromium.org>
> Cr-Commit-Position: refs/heads/main@{#107284}
(cherry picked from commit c055ccbcde8ea8c6f5356fd9f5fb3d6a6b73a9ee)
Bug: 515275150,511218177
Change-Id: I89e8fa26966daf755380719277be0a1656268940
Cr-Commit-Position: refs/branch-heads/14.9@{#36}
Cr-Branched-From: 8f08364a351ad38a60421137a09ef23953ecdd56-refs/heads/14.9.207@{#1}
Cr-Branched-From: 8de67b11924d5e8c0032029165a52d800cf05f1f-refs/heads/main@{#106999}
Files:
- M src/heap/cppgc/heap-page.cc
- M src/heap/cppgc/heap-page.h
- M src/heap/cppgc/object-start-bitmap.h
Change size: M
Delta: 3 files changed, 30 insertions(+), 25 deletions(-)
Branch: refs/branch-heads/14.9
Submit Requirements:
Code-Review: +1 by Michael Lippautz, +1 by Anton Bikineev