RFR: 8262952: [macos_aarch64] os::commit_memory failure

Andrew Haley aph at openjdk.java.net
Tue May 11 09:48:00 UTC 2021


On Mon, 10 May 2021 15:52:40 GMT, Gerard Ziemski <gziemski at openjdk.org> wrote:

>> src/hotspot/os/bsd/os_bsd.cpp line 1708:
>> 
>>> 1706:       // On macOS aarch64 MAP_JIT is required if we want to commit an executable chunk
>>> 1707:       // later, so always reserve executable memory right from the start
>>> 1708:       MACOS_AARCH64_ONLY(| MAP_JIT);
>> 
>> Is this the right way to do it? Where do we ever map memory we want to use for code generation, but not ask for exec permission? Is that a bug?
>
> Inside the hotspot VM code we seem to be doing the right thing, however, in the test, i.e. `test/hotspot/gtest/runtime/test_os.cpp` we ask for regular memory, then try to commit a chunk with elevated exec privileges, which seems to work on all other platforms, except aarch64 macOS.
> 
> The alternative, would be to fix the test in question, but since this scenario works fine on all the other platforms, I figured the proposed way to handle it in the VM  would be the preferable way to fix it, so future test writers do not need to know this particular platform behavior difference and risk getting it wrong again.

I get that, but we're disabling a security feature by always mapping memory as (potentially) executable. So, we're trading runtime VM security for convenience in testing, and that strikes me as a bad bargain.

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

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


More information about the hotspot-runtime-dev mailing list