Without this patch, HotSpot uses `VirtualAlloc()` with `MEM_COMMIT` to
make Windows convert stack pages from "reserved" to "committed", but
doing so does not update the `StackLimit` field in the Thread
Environment Block (TEB) tracked by Windows.  Subsequent use of the stack
by HotSpot can cause the stack pointer to be _below_ `StackLimit`, which
breaks the invariant expected by the Win32 API functions like
`__chkstk()`.

To fix this problem, this patch touches pages one by one, starting from
`StackLimit` down to the target address.  This has the intended effect
of commiting the pages, but it also correctly updates `StackLimit`.

The included test reliably fails without this patch, and it passes with
this patch.  I validated this patch using Tier 1 through 3 tests in the
JDK, HotSpot, and LangTools test groups.

---------
- [x] I confirm that I make this contribution in accordance with the [OpenJDK 
Interim AI Policy](https://openjdk.org/legal/ai).

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

Commit messages:
 - Ensure `StackLimit` is updated when touching pages to commit

Changes: https://git.openjdk.org/jdk/pull/33729/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=33729&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8394484
  Stats: 131 lines in 4 files changed: 126 ins; 3 del; 2 mod
  Patch: https://git.openjdk.org/jdk/pull/33729.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/33729/head:pull/33729

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

Reply via email to