RFR: 8364281: Reduce JNI usage in Linux attach provider

Philippe Marschall duke at openjdk.org
Sat Aug 9 19:57:09 UTC 2025


Reduce the usage of JNI in the Linux attach provider by making more use of the `Path` API.

- use the `Path` API to read file permissions
- use the `Path` API  to write to and read from Unix domain sockets
- use JDK internal APIs to access the euid and eguid

After this the sole usage of JNI in the Linux attach provider will be to send a signal using `kill`.

I ran the tier1 and serviceability test suites and they both pass. I verified I can attach to and attach using a locally built JDK. I didn't do any Docker related tests.

I split the changes into two commits:

- The first commit ports the permission check code more or less directly from C to Java using integer based checks.
- The second commit changes the permission check code to use higher level Java abstractions (`UserPrincipal`, `Set`, ...)

I hope this makes it easier to review and verify the changes preserve the semantics.

To the best of my knowledge `uid_t` is an unsigned 32 bit integer. `VM#geteuid()` returns it as `long`, unsigned. However `UnixUserPrincipals#fromUid` expects an `int`, I believe casting is the correct way to convert in this case.

I tried to keep unrelated changes to `VirtualMachineImpl` to a minimum. I did however replace all usages of `java.io.File` with `java.nio.file.Path` and made two methods `static`. We could get rid of the `socket_path` instance variable if we instead use `socket_address` to flag a disconnect.

Ultimately the same changes can be applied to the macOS an AIX implementations.

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

Commit messages:
 - 8364281: Reduce JNI usage in Linux attach provider
 - 8364281: Reduce JNI usage in Linux attach provider

Changes: https://git.openjdk.org/jdk/pull/26712/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=26712&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8364281
  Stats: 337 lines in 3 files changed: 45 ins; 242 del; 50 mod
  Patch: https://git.openjdk.org/jdk/pull/26712.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/26712/head:pull/26712

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


More information about the serviceability-dev mailing list