On Mar 27, 2013, at 10:35 AM, Mandy Chung <mandy.ch...@oracle.com> wrote:
> This is the JDK change for JEP 176: JEP 176: Mechanical Checking of > Caller-Sensitive Methods [1]. Christian has posted the webrev for the > hotspot VM change a couple weeks ago [2]. > > Webrev at: > http://cr.openjdk.java.net/~mchung/jdk8/webrevs/7198429/webrev.00/ src/share/classes/java/lang/ClassLoader.java: + static void checkClassLoaderPermission(ClassLoader cl, Class<?> caller) { I think we should rename that method to: + static void checkGetClassLoaderPermission(ClassLoader cl, Class<?> caller) { src/share/classes/java/lang/invoke/MethodHandleImpl.java: + @sun.reflect.CallerSensitive + Class<?> actual = sun.reflect.Reflection.getCallerClass(); Why are we not using imports here? src/share/classes/java/util/logging/Logger.java: // 0: Reflection 1: Logger.demandLogger 2: Logger.getLogger 3: caller final int SKIP_FRAMES = 3; Please remove these lines as well. src/share/native/sun/reflect/Reflection.c: Could you put back this comment: + // Let's do at least some basic handshaking: + const int depth = -1; It makes it clearer why it's -1. test/sun/reflect/GetCallerClass.sh: Could you please don't use a shell script to copy the class file? For example this test: http://hg.openjdk.java.net/hsx/hotspot-main/hotspot/file/tip/test/compiler/whitebox/DeoptimizeAllTest.java does the same thing using a little Java program ClassFileInstaller: http://hg.openjdk.java.net/hsx/hotspot-main/hotspot/file/tip/test/testlibrary/ClassFileInstaller.java -- Chris > > While it touches many files, the fix is simple and straight-forward for > review. > > This fix annotates all methods that call Reflection.getCallerClass() method > with @sun.reflect.CallerSensitive annotation so that it enables the VM to > reliably enforce that methods looking up its immediate caller class are > marked as caller-sensitive. The JVM will set a new caller-sensitive bit when > resolving a MemberName and > java.lang.invoke.MethodHandleNatives.isCallerSensitive is upgraded to query > it directly. > The hand-maintained method list in MethodHandleNatives is removed. > > A couple things to mention: > 1. I am working on a fix for 8007035 that proposes to deprecate > SecurityManager.checkMemberAccess method as it requires the caller’s frame to > be at a stack depth of four, which is fragile and difficult to enforce. > > 2. NashornScriptEngineFactory.getAppClassLoader() > > The change is to workaround the issue until 8009783 is resolved. > > The current implementation walks the stack to find the classloader of the > user context that NashornScriptEngine is running on which is fragile. Also > other script engine implementations may require similiar capability. 8009783 > has been filed to revisit the scripting API to pass the user "context" to the > script engine rather than relying the implementation to find it magically. > > Thanks > Mandy > > [1] http://openjdk.java.net/jeps/176 > [2] http://mail.openjdk.java.net/pipermail/hotspot-dev/2013-March/008915.html