# HG changeset patch # User Andrew John Hughes # Date 1421885961 0 # Node ID 17332a8545d8e344b8f747c29fba487ea8bdfd1a # Parent b08e78ab545a872d45eeb512671b1dfba4f9195d PR2050: JamVM lacks JVM_FindClassFromCaller introduced by security patch in 2.5.3 2015-01-07 Andrew John Hughes PR2050: JamVM lacks JVM_FindClassFromCaller introduced by security patch in 2.5.3 * Makefile.am: (ICEDTEA_PATCHES): Add new patch when building JamVM. (EXTRA_DIST): Include patches from JamVM directory. * NEWS: Updated. * patches/jamvm/find_class_from_caller.patch: Backport JamVM patch to implement FindClassFromCaller. diff -r b08e78ab545a -r 17332a8545d8 ChangeLog --- a/ChangeLog Wed Jan 21 18:20:42 2015 +0000 +++ b/ChangeLog Thu Jan 22 00:19:21 2015 +0000 @@ -1,3 +1,15 @@ +2015-01-07 Andrew John Hughes + + PR2050: JamVM lacks JVM_FindClassFromCaller introduced + by security patch in 2.5.3 + * Makefile.am: + (ICEDTEA_PATCHES): Add new patch when building + JamVM. + (EXTRA_DIST): Include patches from JamVM directory. + * NEWS: Updated. + * patches/jamvm/find_class_from_caller.patch: + Backport JamVM patch to implement FindClassFromCaller. + 2015-01-07 Andrew John Hughes PR2161: RHEL 6 has a version of GIO which meets diff -r b08e78ab545a -r 17332a8545d8 Makefile.am --- a/Makefile.am Wed Jan 21 18:20:42 2015 +0000 +++ b/Makefile.am Thu Jan 22 00:19:21 2015 +0000 @@ -268,6 +268,11 @@ patches/cacao/ignore-tests.patch endif +if BUILD_JAMVM +ICEDTEA_PATCHES += \ + patches/jamvm/pr2050-find_class_from_caller.patch +endif + if ENABLE_NSS ICEDTEA_PATCHES += patches/nss-config.patch \ patches/rh1022017.patch @@ -776,6 +781,7 @@ $(top_srcdir)/patches/boot/*.patch \ $(top_srcdir)/patches/cacao/*.patch \ $(top_srcdir)/patches/hotspot/*/*.patch \ + $(top_srcdir)/patches/jamvm/*.patch \ tools-copy contrib overlays \ jconsole.desktop policytool.desktop \ $(JTREG_SRCS) HACKING autogen.sh \ diff -r b08e78ab545a -r 17332a8545d8 NEWS --- a/NEWS Wed Jan 21 18:20:42 2015 +0000 +++ b/NEWS Thu Jan 22 00:19:21 2015 +0000 @@ -110,6 +110,8 @@ - PR2124: Synchronise elliptic curves in sun.security.ec.NamedCurve with those listed by NSS - PR2135: Race condition in SunEC provider with system NSS - PR2161: RHEL 6 has a version of GIO which meets the version criteria, but has no g_settings_* +* JamVM + - PR2050: JamVM lacks JVM_FindClassFromCaller introduced by security patch in 2.5.3 New in release 2.5.3 (2014-10-14): diff -r b08e78ab545a -r 17332a8545d8 patches/jamvm/pr2050-find_class_from_caller.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/jamvm/pr2050-find_class_from_caller.patch Thu Jan 22 00:19:21 2015 +0000 @@ -0,0 +1,93 @@ +diff -Nru jamvm.old/src/classlib/openjdk/class.c jamvm/src/classlib/openjdk/class.c +--- jamvm/jamvm.old/src/classlib/openjdk/class.c 2013-11-18 03:45:44.000000000 +0000 ++++ jamvm/jamvm/src/classlib/openjdk/class.c 2015-01-07 16:14:57.599311159 +0000 +@@ -23,6 +23,7 @@ + #include "jam.h" + #include "hash.h" + #include "class.h" ++#include "excep.h" + #include "symbol.h" + + /* Cached offset of classes field in java.lang.ClassLoader objects */ +@@ -161,3 +162,24 @@ + + return strcat(strcpy(endorsed_dirs, java_home), "/lib/endorsed"); + } ++ ++Class *findClassFromLoader(char *name, int init, Object *loader, ++ int throw_error) { ++ ++ Class *class = findClassFromClassLoader(name, loader); ++ ++ if(class == NULL) { ++ if(!throw_error) { ++ Object *excep = exceptionOccurred(); ++ char *dot_name = slash2DotsDup(name); ++ ++ clearException(); ++ signalChainedException(java_lang_ClassNotFoundException, ++ dot_name, excep); ++ sysFree(dot_name); ++ } ++ } else if(init) ++ initClass(class); ++ ++ return class; ++} +diff -Nru jamvm.old/src/classlib/openjdk/jvm.c jamvm/src/classlib/openjdk/jvm.c +--- jamvm/jamvm.old/src/classlib/openjdk/jvm.c 2013-11-18 03:45:44.000000000 +0000 ++++ jamvm/jamvm/src/classlib/openjdk/jvm.c 2015-01-07 16:16:43.560605105 +0000 +@@ -520,26 +520,22 @@ + jclass JVM_FindClassFromClassLoader(JNIEnv *env, const char *name, + jboolean init, jobject loader, + jboolean throw_error) { +- Class *class; + + TRACE("JVM_FindClassFromClassLoader(env=%p, name=%s, init=%d, loader=%p," + " throwError=%d)", env, name, init, loader, throwError); + +- class = findClassFromClassLoader((char *)name, loader); ++ return findClassFromLoader((char *)name, init, loader, throw_error); ++} ++ ++/* JVM_FindClassFromCaller */ ++ ++jclass JVM_FindClassFromCaller(JNIEnv *env, const char *name, jboolean init, ++ jobject loader, jclass caller) { + +- if(class == NULL && !throw_error) { +- Object *excep = exceptionOccurred(); +- char *dot_name = slash2DotsDup((char*)name); +- +- clearException(); +- signalChainedException(java_lang_ClassNotFoundException, +- dot_name, excep); +- sysFree(dot_name); +- } else +- if(init) +- initClass(class); ++ TRACE("JVM_FindClassFromCaller(env=%p, name=%s, init=%d, loader=%p," ++ " caller=%p)", env, name, init, loader, caller); + +- return class; ++ return findClassFromLoader((char *)name, init, loader, FALSE); + } + + +diff -Nru jamvm.old/src/classlib/openjdk/openjdk.h jamvm/src/classlib/openjdk/openjdk.h +--- jamvm/jamvm.old/src/classlib/openjdk/openjdk.h 2013-11-18 03:45:44.000000000 +0000 ++++ jamvm/jamvm/src/classlib/openjdk/openjdk.h 2015-01-07 16:14:57.599311159 +0000 +@@ -1,5 +1,5 @@ + /* +- * Copyright (C) 2010, 2011, 2013 Robert Lougher . ++ * Copyright (C) 2010, 2011, 2013, 2014 Robert Lougher . + * + * This file is part of JamVM. + * +@@ -53,3 +53,6 @@ + extern Object *resolveMemberName(Class *mh_class, Object *mname); + + extern Object *getMethodParameters(Object *method); ++ ++extern Class *findClassFromLoader(char *name, int init, Object *loader, ++ int throw_error);