On Mon, 11 Aug 2025 11:33:19 GMT, Per Minborg <[email protected]> wrote:
> ### Description
> This PR proposes to update the `ClassLoader` implementation to properly guard
> access to the provided `ByteBuffer` when defining a class using
> `defineClass(String, ByteBuffer, ...)`. Specifically, calls to
> `SharedSecrets.getJavaNioAccess().acquireSession(ByteBuffer)` and
> `releaseSession(ByteBuffer)` have been introduced to ensure safe and
> consistent buffer access throughout the native class definition process, even
> in the case of a `ByteBuffer` is backed by a `MemorySegment`.
>
> ### Impact
> This modification is internal to the `ClassLoader` implementation and does
> not affect the public API.
> Improves the robustness and security of class loading from buffers.
>
> ### Testing
> Tier 1, 2, and 3 JDK tests pass on multiple platforms.
src/java.base/share/classes/java/lang/ClassLoader.java line 1057:
> 1055: try {
> 1056: Class<?> c = defineClass2(this, name, b, b.position(), len,
> protectionDomain, source);
> 1057: postDefineClass(c, protectionDomain);
Should we leave postDefineClass out of this acquire-release scope? I don't see
any reason including this.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/26724#discussion_r2266981328