12 RFR(M) 8214583: AccessController.getContext may return wrong value after JDK-8212605

David Holmes david.holmes at oracle.com
Mon Dec 17 00:06:22 UTC 2018


On 15/12/2018 10:59 am, dean.long at oracle.com wrote:
> 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".

Then surely the compiler's notion of "escapes" needs to be updated!

David
-----

   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