RFR: 8346971: [ubsan] psCardTable.cpp:131:24: runtime error: large index is out of bounds [v2]
Albert Mingkun Yang
ayang at openjdk.org
Mon Jan 13 12:27:44 UTC 2025
On Mon, 13 Jan 2025 10:42:33 GMT, Kim Barrett <kbarrett at openjdk.org> wrote:
>> Please review this change to PSStripeShadowCardTable to avoid several examples
>> of UB in it's internal calculations. We avoid the UB by switching to the
>> integer domain (using uintptr_t) for all of the internal calculations, with
>> casts between pointers and uintptr_t as needed at the boundaries.
>>
>> This applies not just to the various pointer adjustments, but also to pointer
>> comparisons. In particular, the prior range check assertions using pointer
>> comparisons could have been partially or even completely "optimized" away
>> based on the no-UB assumption.
>>
>> Testing: mach5 tier1-5
>> local (linux-x64) tier1 with -XX:+UseParallelGC
>
> Kim Barrett has updated the pull request incrementally with one additional commit since the last revision:
>
> typo: intptr_t => uintptr_t
src/hotspot/share/gc/parallel/psCardTable.cpp line 149:
> 147: assert(iaddr(card) >= iaddr(_table), "out of bounds");
> 148: assert(iaddr(card) <= (iaddr(_table) + sizeof(_table)), "out of bounds");
> 149: }
The two impls look identical to me. Also, can you change `check` to `verify` to make it more explicit that they are for verification only?
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/23032#discussion_r1913094129
More information about the hotspot-gc-dev
mailing list