RFR: 8377512: AOT cache creation fails with invalid native pointer [v3]

Ioi Lam iklam at openjdk.org
Thu Feb 26 02:14:29 UTC 2026


> Since JDK 25, we have two bugs that cause a pointer to an excluded class to be referenced by a cached heap object.
> 
> [1] Method references to excluded classes: 
> 
> 
> interface A {
>     Object get();
> }
> ...
> A a = ShouldBeExcluded::new; // line 1
> 
> 
> [2] Invocation of a `MethodHandle` whose `MethodType` includes an excluded class:
> 
> 
> MethodHandle constructorHandle =
>     MethodHandles.lookup().unreflectConstructor(ShouldBeExcluded.class.getConstructor());
> // The JVM rewrites the following invoke() from
> // invokevirtual <java/lang/invoke/MethodHandle.invoke()LShouldBeExcluded;>
> // to
> // invokehandle <java/lang/invoke/MethodHandle.invoke()LShouldBeExcluded;>
> ShouldBeExcluded o = (ShouldBeExcluded)constructorHandle.invoke(); // line 2
> 
> 
> In the above examples, during the training run, the AOT configuration file records the fact that the constant pool entries used by line 1 and line 2 have been resolved. Normally, these references are resolved by AOTConstantPoolResolver during the assembly phase (to improve start-up time).
> 
> However, resolving these 2 entries would cause an invalid `MethodType` that references the `ShouldBeExcluded` class to be add into `MethodType::internTable`. Once this happens, it's very difficult for to recover from.
> 
> Therefore, this PR tries to avoid adding such invalid `MethodType` by avoiding the resolution of such constant pool entries.
> 
> Thanks to folks at Azul from coming up with the reproducer.

Ioi Lam has updated the pull request incrementally with one additional commit since the last revision:

  Added asserts for the correctness of calling SystemDictionaryShared::should_be_excluded in the previous commit

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/29825/files
  - new: https://git.openjdk.org/jdk/pull/29825/files/3f12ba5e..32efa79f

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=29825&range=02
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=29825&range=01-02

  Stats: 11 lines in 1 file changed: 10 ins; 0 del; 1 mod
  Patch: https://git.openjdk.org/jdk/pull/29825.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/29825/head:pull/29825

PR: https://git.openjdk.org/jdk/pull/29825


More information about the hotspot-dev mailing list