RFR: 8366154: Validate thread type requirements in debug commands [v4]

Kerem Kat krk at openjdk.org
Wed Sep 10 10:09:46 UTC 2025


> Prevents segmentation faults during `gdb` sessions. The crashes were caused by the `ResourceMark` constructor being called on a native thread, which is not supported. This happened when invoking debug commands that require a `Thread` or `JavaThread` context from an incorrect thread type.
> 
> ### Solution
> 
> This change introduces `onThread()` and `onJavaThread()` helper methods to the `Command` class. These methods validate the thread context and ensure `ResourceMark` is only created when on a valid VM thread. All thread-dependent debug commands now use these guards to validate the context, printing a clear error and exiting gracefully upon failure.
> 
> ### Testing
> 
> Manually verified using `gdb` by calling the modified commands (`ps`, `universe`, `pns`, etc.) from different thread contexts (native, Java, and non-java threads) to ensure they fail gracefully with an error message instead of crashing the debug session.

Kerem Kat has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains seven additional commits since the last revision:

 - Merge branch 'master' into JDK-8366154
 - refine comment
 - remove redundant proto for findpc
 - add include for global placement new
 - remove onJavaThread and check JavaThread::active null where needed
 - Update src/hotspot/share/utilities/debug.cpp
   
   Co-authored-by: Francesco Andreuzzi <andreuzzi.francesco at gmail.com>
 - 8366154: Validate thread type requirements in debug commands
   
   Prevent crashes when calling interactive debug commands from native
   or non-java threads.
   
   Add onThread() and onJavaThread() methods to the Command class to
   validate the current thread type. Update debug commands to use these
   checks, printing an error and exiting gracefully upon failure.

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/27033/files
  - new: https://git.openjdk.org/jdk/pull/27033/files/d19470e7..f75de4bd

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

  Stats: 23617 lines in 1156 files changed: 11615 ins; 7226 del; 4776 mod
  Patch: https://git.openjdk.org/jdk/pull/27033.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/27033/head:pull/27033

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


More information about the hotspot-dev mailing list