Currently, a `Lookup` object with `PACKAGE` access can be used to inject a 
class in the runtime package of the Lookup's lookup class via 
`Lookup::defineClass`.   The classes that are injected have the same access as 
other members in the module and can access private members of all types in the 
module via reflection.

However, changing `Lookup.defineClass` to require full privilege access 
(`PRIVATE` + `MODULE`) is an incompatible change that would break existing 
frameworks which use `privateLookupIn` and `Lookup::defineClass` to inject 
auxiliary classes in a module.   A module authorizes the framework by opening a 
package for it to access and `Lookup::defineClass` was the supported 
replacement for `setAccessible` on `ClassLoader::defineClass` hack in JDK 9.    

This PR proposes to keep existing behavior and provide better documentation to 
help developers to beware of the permissions given out when opening a package 
to another module. A class injected in a module has the same privilege as other 
module members.

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

Commit messages:
 - 8217920: Lookup.defineClass injects a class that can access private members 
of any class in its own module

Changes: https://git.openjdk.org/jdk/pull/12236/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=12236&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8217920
  Stats: 22 lines in 2 files changed: 21 ins; 0 del; 1 mod
  Patch: https://git.openjdk.org/jdk/pull/12236.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/12236/head:pull/12236

PR: https://git.openjdk.org/jdk/pull/12236

Reply via email to