[core-libs] RFR (L): 8010319: Implementation of JEP 181: Nest-Based Access Control

David Holmes david.holmes at oracle.com
Tue Jun 12 05:16:13 UTC 2018


Here is one further minor update from the CSR discussions:

http://cr.openjdk.java.net/~dholmes/8010319-JEP181/webrev.corelibs.v5-incr/src/java.base/share/classes/java/lang/Class.java.cdiff.html

Thanks,
David

On 25/05/2018 3:52 PM, David Holmes wrote:
> Here are the further minor updates so far in response to all the review 
> comments.
> 
> Incremental corelibs webrev:
> http://cr.openjdk.java.net/~dholmes/8010319-JEP181/webrev.corelibs.v3-incr/
> 
> Full corelibs webrev:
> http://cr.openjdk.java.net/~dholmes/8010319-JEP181/webrev.corelibs.v3/
> 
> Change summary:
> 
> src/java.base/share/classes/jdk/internal/reflect/Reflection.java
> - remove inaccurate pseudo-assertion comment
> 
> test/jdk/java/lang/reflect/Nestmates/SampleNest.java
> - code cleanup: <> operator
> 
> test/jdk/java/lang/reflect/Nestmates/TestReflectionAPI.java
> - code cleanup: streamify duplicate removals
> 
> test/jdk/java/lang/invoke/PrivateInterfaceCall.java
> - use consistent @bug number
> 
> Thanks,
> David
> 
> On 22/05/2018 8:15 PM, David Holmes wrote:
>> Here are the updates so far in response to all the review comments.
>>
>> Incremental webrev: 
>> http://cr.openjdk.java.net/~dholmes/8010319-JEP181/webrev.corelibs.v2-incr/ 
>>
>>
>> Full webrev: 
>> http://cr.openjdk.java.net/~dholmes/8010319-JEP181/webrev.corelibs.v2/
>>
>> Change summary:
>>
>> src/java.base/share/classes/java/lang/Class.java
>> - getNesthost:
>>    - change "any error" -> "any linkage error" as runtime errors will 
>> propagate. [This needs ratifying by EG]
>>    - add clarification that primitive and array classes are not 
>> explicitly members of any nest and so form singleton nests
>>    - add clarification that all nestmates are in the same package
>>    - re-word @return text to exclude the "royal 'we'"
>> - fix javadoc cross references
>>
>> ---
>>
>> Moved reflection API tests from 
>> test/hotspot/jtreg/runtime/Nestmates/reflectionAPI/ to 
>> test/jdk/java/lang/reflect/Nestmates/
>>
>> ---
>>
>> java/lang/reflect/Nestmates/TestReflectionAPI.java
>>
>> Run tests twice to show that failure reasons remain the same.
>>
>> ---
>>
>> test/jdk/jdk/lambda/vm/InterfaceAccessFlagsTest.java
>>
>> Disable test via annotation rather than commenting out.
>>
>> ---
>>
>> src/java.base/share/classes/jdk/internal/reflect/Reflection.java
>>
>> - Fix indent for nestmate access check.
>> - Remove unnecessary local variable
>>
>> ---
>>
>> src/java.base/share/classes/sun/invoke/util/VerifyAccess.java
>>
>> - Replace myassert with proper assert
>>
>> ---
>>
>> Thanks,
>> David
>>
>> On 15/05/2018 10:52 AM, David Holmes wrote:
>>> This review is being spread across four groups: langtools, core-libs, 
>>> hotspot and serviceability. This is the specific review thread for 
>>> core-libs - webrev:
>>>
>>> http://cr.openjdk.java.net/~dholmes/8010319-JEP181/webrev.corelibs.v1/
>>>
>>> See below for full details - including annotated full webrev guiding 
>>> the review.
>>>
>>> The intent is to have JEP-181 targeted and integrated by the end of 
>>> this month.
>>>
>>> Thanks,
>>> David
>>> -----
>>>
>>> The nestmates project (JEP-181) introduces new classfile attributes 
>>> to identify classes and interfaces in the same nest, so that the VM 
>>> can perform access control based on those attributes and so allow 
>>> direct private access between nestmates without requiring javac to 
>>> generate synthetic accessor methods. These access control changes 
>>> also extend to core reflection and the MethodHandle.Lookup contexts.
>>>
>>> Direct private calls between nestmates requires a more general 
>>> calling context than is permitted by invokespecial, and so the JVMS 
>>> is updated to allow, and javac updated to use, invokevirtual and 
>>> invokeinterface for private class and interface method calls 
>>> respectively. These changed semantics also extend to MethodHandle 
>>> findXXX operations.
>>>
>>> At this time we are only concerned with static nest definitions, 
>>> which map to a top-level class/interface as the nest-host and all its 
>>> nested types as nest-members.
>>>
>>> Please see the JEP for further details.
>>>
>>> JEP: https://bugs.openjdk.java.net/browse/JDK-8046171
>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8010319
>>> CSR: https://bugs.openjdk.java.net/browse/JDK-8197445
>>>
>>> All of the specification changes have been previously been worked out 
>>> by the Valhalla Project Expert Group, and the implementation reviewed 
>>> by the various contributors and discussed on the valhalla-dev mailing 
>>> list.
>>>
>>> Acknowledgments and contributions: Alex Buckley, Maurizio Cimadamore, 
>>> Mandy Chung, Tobias Hartmann, Vladimir Ivanov, Karen Kinnear, 
>>> Vladimir Kozlov, John Rose, Dan Smith, Serguei Spitsyn, Kumar Srinivasan
>>>
>>> Master webrev of all changes:
>>>
>>> http://cr.openjdk.java.net/~dholmes/8010319-JEP181/webrev.full.v1/
>>>
>>> Annotated master webrev index:
>>>
>>> http://cr.openjdk.java.net/~dholmes/8010319-JEP181/jep181-webrev.html
>>>
>>> Performance: this is expected to be performance neutral in a general 
>>> sense. Benchmarking and performance runs are about to start.
>>>
>>> Testing Discussion:
>>> ------------------
>>>
>>> The testing for nestmates can be broken into four main groups:
>>>
>>> -  New tests specifically related to nestmates and currently in the 
>>> runtime/Nestmates directory
>>>
>>> - New tests to complement existing tests by adding in testcases not 
>>> previously expressible.
>>>    -  For example java/lang/invoke/SpecialInterfaceCall.java tests 
>>> use of invokespecial for private interface methods and performing 
>>> receiver typechecks, so we add 
>>> java/lang/invoke/PrivateInterfaceCall.java to do similar tests for 
>>> invokeinterface.
>>>
>>> -  New JVM TI tests to verify the spec changes related to nest 
>>> attributes.
>>>
>>> -  Existing tests significantly affected by the nestmates changes, 
>>> primarily:
>>>     -  runtime/SelectionResolution
>>>
>>>     In most cases the nestmate changes makes certain invocations that 
>>> were illegal, legal (e.g. not requiring invokespecial to invoke 
>>> private interface methods; allowing access to private members via 
>>> reflection/Methodhandles that were previously not allowed).
>>>
>>> - Existing tests incidentally affected by the nestmate changes
>>>
>>>    This includes tests of things utilising class 
>>> redefinition/retransformation to alter nested types but which 
>>> unintentionally alter nest relationships (which is not permitted).
>>>
>>> There are still a number of tests problem-listed with issues filed 
>>> against them to have them adapted to work with nestmates. Some of 
>>> these are intended to be addressed in the short-term, while some 
>>> (such as the runtime/SelectionResolution test changes) may not 
>>> eventuate.
>>>
>>> - https://bugs.openjdk.java.net/browse/JDK-8203033
>>> - https://bugs.openjdk.java.net/browse/JDK-8199450
>>> - https://bugs.openjdk.java.net/browse/JDK-8196855
>>> - https://bugs.openjdk.java.net/browse/JDK-8194857
>>> - https://bugs.openjdk.java.net/browse/JDK-8187655
>>>
>>> There is also further test work still to be completed (the JNI and 
>>> JDI invocation tests):
>>> - https://bugs.openjdk.java.net/browse/JDK-8191117
>>> which will continue in parallel with the main RFR.
>>>
>>> Pre-integration Testing:
>>>   - General:
>>>      - Mach5: hs/jdk tier1,2
>>>      - Mach5: hs-nightly (tiers 1 -3)
>>>   - Targetted
>>>     - nashorn (for asm changes)
>>>     - hotspot: runtime/*
>>>                serviceability/*
>>>                compiler/*
>>>                vmTestbase/*
>>>     - jdk: java/lang/invoke/*
>>>            java/lang/reflect/*
>>>            java/lang/instrument/*
>>>            java/lang/Class/*
>>>            java/lang/management/*
>>>    - langtools: tools/javac
>>>                 tools/javap
>>>


More information about the core-libs-dev mailing list