RFR: 8358289: [asan] runtime/cds/appcds/aotCode/AOTCodeFlags.java reports heap-buffer-overflow in ArchiveBuilder [v2]

Aleksey Shipilev shade at openjdk.org
Tue Jun 3 17:49:41 UTC 2025


On Tue, 3 Jun 2025 10:47:25 GMT, Vladimir Kozlov <kvn at openjdk.org> wrote:

>> There is difference between AdapterFingerPrint allocation size [compute_size](https://github.com/openjdk/jdk/blob/master/src/hotspot/share/runtime/sharedRuntime.cpp#L2227) which may not be aligned to HeapWord size and [size](https://github.com/openjdk/jdk/blob/master/src/hotspot/share/runtime/sharedRuntime.cpp#L2421) used for copying during AOT cache build which is aligned and can be bigger than allocation size. 
>> 
>> I added asserts to `AdapterFingerPrint` and `AdapterHandlerEntry` to make sure sizes are correct. Both are used in AOT cache build.
>> 
>> I also moved `FreeHeap()` from `~AdapterFingerPrint()` to enforce the comment and simplify executed code.
>> 
>> Thanks to @MBaesken for finding the issue and @iklam for pointing the cause.
>> 
>> Testing tier1-3, xcomp, stress. Higher tiers are still running.
>
> Vladimir Kozlov has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Remove unused argument

src/hotspot/share/runtime/sharedRuntime.cpp line 2227:

> 2225:   }
> 2226: 
> 2227:   static int compute_size(int total_args_passed) {

OK, but if the source of discrepancy is between two places computing stuff separately (inconsistently), do you want to make the computations mechanically the same?

Something like:


static int compute_size_in_words(int total_args_passed) {
  return (int)heap_word_size(sizeof(AdapterFingerPrint) + (length(total_args_passed) * sizeof(int)));
}

static int compute_size_in_bytes(int total_args_passed) {
  return compute_size_in_words(total_args_passed) * BytesPerWord;
}


Then use `compute_size_in_words()` in the other place: https://github.com/openjdk/jdk/blob/master/src/hotspot/share/runtime/sharedRuntime.cpp#L2421

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/25604#discussion_r2124505187


More information about the hotspot-dev mailing list