RFR: JDK-8299790: os::print_hex_dump is racy

Thomas Stuefe stuefe at openjdk.org
Sun Jul 16 19:56:32 UTC 2023


Tiny fix for a tiny problem. 

`os::print_hex_dump` uses `os::is_readable_pointer` to check the to-be-printed memory for readability; `os::is_readable_pointer` uses `SafeFetch` to probe the memory for access, which is good, but then, by the time we actually print that information, we reread the memory location again. It may be unreadable now (either because the region had been unmapped or protected by a concurrent thread), and we would crash the VM.

The patch rewrites the function to not use `os::is_readable_pointer`, but to use `SafeFetch` to read from memory directly and then use the result of that read for printing. That requires a bit of bit fiddling, since we only can read word-wise, but the hex-dump could be in units between bytes and qwords.

Tests: manual and GHA-driven gtests on all platforms. The gtests test this function exhaustively.

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

Commit messages:
 - remove debug output from gtest
 - JDK-8299790-os-print-hex-dump-should-use-SafeFetch

Changes: https://git.openjdk.org/jdk/pull/14895/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=14895&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8299790
  Stats: 66 lines in 2 files changed: 42 ins; 2 del; 22 mod
  Patch: https://git.openjdk.org/jdk/pull/14895.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/14895/head:pull/14895

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


More information about the hotspot-runtime-dev mailing list