# HG changeset patch # User andrew # Date 1508194072 -3600 # Mon Oct 16 23:47:52 2017 +0100 # Node ID 5dcb55da00c1531264934559c9f10c2e0ae46420 # Parent bf62c56e3604fee0018b19f65fd56c76dc156630 PR3479, RH1486025: ECC and NSS JVM crash Summary: SunEC provider can have multiple instances, leading to premature NSS shutdown Contributed-by: Martin Balao diff --git a/make/mapfiles/libsunec/mapfile-vers b/make/mapfiles/libsunec/mapfile-vers --- openjdk/jdk/make/mapfiles/libsunec/mapfile-vers +++ openjdk/jdk/make/mapfiles/libsunec/mapfile-vers @@ -32,7 +32,6 @@ Java_sun_security_ec_ECDSASignature_verifySignedDigest; Java_sun_security_ec_ECDHKeyAgreement_deriveKey; Java_sun_security_ec_SunEC_initialize; - Java_sun_security_ec_SunEC_cleanup; local: *; }; diff --git a/src/share/classes/sun/security/ec/SunEC.java b/src/share/classes/sun/security/ec/SunEC.java --- openjdk/jdk/src/share/classes/sun/security/ec/SunEC.java +++ openjdk/jdk/src/share/classes/sun/security/ec/SunEC.java @@ -83,21 +83,8 @@ } /** - * Cleanup native resources during finalisation. - */ - @Override - protected void finalize() { - cleanup(); - } - - /** * Initialize the native code. */ private static native void initialize(); - /** - * Cleanup in the native layer. - */ - private static native void cleanup(); - } diff --git a/src/share/native/sun/security/ec/ECC_JNI.cpp b/src/share/native/sun/security/ec/ECC_JNI.cpp --- openjdk/jdk/src/share/native/sun/security/ec/ECC_JNI.cpp +++ openjdk/jdk/src/share/native/sun/security/ec/ECC_JNI.cpp @@ -525,14 +525,12 @@ } JNIEXPORT void -JNICALL Java_sun_security_ec_SunEC_cleanup - (JNIEnv *env, jclass UNUSED(clazz)) +JNICALL JNI_OnUnload + (JavaVM *vm, void *reserved) { #ifdef SYSTEM_NSS RNG_RNGShutdown(); - if (SECOID_Shutdown() != SECSuccess) { - ThrowException(env, INTERNAL_ERROR); - } + SECOID_Shutdown(); #endif }