12 RFR(M) 8214583: AccessController.getContext may return wrong value after JDK-8212605
dean.long at oracle.com
dean.long at oracle.com
Sat Dec 15 00:59:33 UTC 2018
https://bugs.openjdk.java.net/browse/JDK-8214583
http://cr.openjdk.java.net/~dlong/8214583/webrev
This change includes two new regression test that demonstrate the
problem, and a fix that allows the tests
to pass.
The problem happens when the JIT compiler's escape analysis eliminates
the allocation of the AccessControlContext object passed to
doPrivileged. The compiler thinks this is safe because it does not see
that the object "escapes". However, getContext needs to be able to find
the object using a stack walk, so we need a way to tell the compiler
that it does indeed escape. To do this we pass the value to a native
method that does nothing.
Microbenchmark results:
jdk12-b18:
Benchmark Mode Cnt Score Error Units
DoPrivileged.test avgt 25 255.626 ± 6.446 ns/op
DoPrivileged.testInline avgt 25 250.968 ± 4.975 ns/op
jdk12-b19:
Benchmark Mode Cnt Score Error Units
DoPrivileged.test avgt 25 5.689 ± 0.001 ns/op
DoPrivileged.testInline avgt 25 2.765 ± 0.001 ns/op
this fix:
Benchmark Mode Cnt Score Error Units
DoPrivileged.test avgt 25 5.020 ± 0.001 ns/op
DoPrivileged.testInline avgt 25 2.774 ± 0.025 ns/op
dl
More information about the security-dev
mailing list