Blame SOURCES/pr3479-rh1486025-sunec_provider_can_have_multiple_instances_leading_to_premature_nss_shutdown.patch

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