On Tue, 16 Dec 2025 18:47:34 GMT, Jorn Vernee <[email protected]> wrote:
> ASAN correctly detected a use-after-free in this test.
>
> The issue is that an async `ScopedAccessError` is thrown while executing java
> code as part of a JVMTI callback. This exception is meant to unwind out of a
> scoped memory access, to prevent access to memory that has already been
> freed. But, currently the native agent code is printing and clearing the
> exception, which doesn't prevent the memory access from occurring, leading to
> a use-after-free.
>
> Ideally, the agent should propagate the exception to the place in the Java
> code where the JVMTI event happens, but it is not possible to exit the
> callback with a pending exception, and AFAICT there is no JVMTI API for
> propagating async exceptions that are thrown during a JVMTI callback. So, the
> only sane thing the test can do is exit the process, which is what I've
> implemented here.
>
> This fixes the test, but it leaves the larger question of how JVMTI agents
> should deal with async exceptions unresolved.
The updated logic in the test looks clear. And it properly prevents the
asan-identified access from happening.
test/jdk/java/foreign/sharedclosejvmti/libSharedCloseAgent.cpp line 109:
> 107: jni_env->ExceptionDescribe();
> 108: if (jni_env->IsInstanceOf(ex, EXCEPTION_CLS)) {
> 109: exit(0); // success
Just curious, does this just terminate the agent? If this terminates the JVM,
how is the checked string printed:
output.stderrShouldContain("Exception in thread "Trigger"
jdk.internal.misc.ScopedMemoryAccess$ScopedAccessError: Invalid memory access");
test/jdk/java/foreign/sharedclosejvmti/libSharedCloseAgent.cpp line 115:
> 113: }
> 114:
> 115: jvmti_env->Deallocate((unsigned char*) method_name);
We can move the 2 Deallocate to right above CallStaticVoidMethod.
-------------
Marked as reviewed by liach (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/28853#pullrequestreview-3585028117
PR Review Comment: https://git.openjdk.org/jdk/pull/28853#discussion_r2624622160
PR Review Comment: https://git.openjdk.org/jdk/pull/28853#discussion_r2624619545