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