jmm_GetDiagnosticCommandArgumentsInfo and jmm_GetDiagnosticCommandInfo are used 
to query the hotspot about diagnostic commands. They provide output arrays for 
the information:


void jmm_GetDiagnosticCommandArgumentsInfo(JNIEnv *env,
          jstring command, dcmdArgInfo* infoArray)


but array size is implicitly assumed to be known to both caller and callee. 
Caller and callee negotiate those sizes in prior steps, but things can go 
wrong. E.g. I recently hunted a bug where `DCmd::number_arguments()` was off - 
did not reflect the real number of its jcmd parameters - which led to a hidden 
memory overwriter.

Thankfully, JDK-8264565 rewrote the dcmd framework to deal with this particular 
issue (The VM I analyzed was older). Still, it would be good if we had 
additional safety measures here.

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

Testing:
- manual tests with artificially induced error in one dcmd for debug, release
- GHAs (which include tier1 serviceability jcmd tests which use JMX and 
exercise these APIs)

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

Commit messages:
 - explicitly pass output array size and check it in hotspot

Changes: https://git.openjdk.java.net/jdk/pull/6363/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=6363&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8277029
  Stats: 18 lines in 3 files changed: 8 ins; 0 del; 10 mod
  Patch: https://git.openjdk.java.net/jdk/pull/6363.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/6363/head:pull/6363

PR: https://git.openjdk.java.net/jdk/pull/6363

Reply via email to