# HG changeset patch # User ascarpino # Date 1415468565 28800 # Node ID 1861e973037468b323843b69a3252e2960945561 # Parent a73b9a26a9ae472524989c7d574c12f7b5ea14cc 8063700: -Xcheck:jni changes cause many JCK failures in api/javax_crypto tests in SunPKCS11 Reviewed-by: mullan, valeriep diff -r a73b9a26a9ae -r 1861e9730374 src/share/native/sun/security/pkcs11/wrapper/p11_crypt.c --- a/src/share/native/sun/security/pkcs11/wrapper/p11_crypt.c Fri Apr 18 18:46:50 2014 +0400 +++ b/src/share/native/sun/security/pkcs11/wrapper/p11_crypt.c Sat Nov 08 09:42:45 2014 -0800 @@ -141,8 +141,8 @@ (CK_BYTE_PTR)(outBufP + jOutOfs), &ckEncryptedPartLen); - (*env)->ReleasePrimitiveArrayCritical(env, jOut, outBufP, JNI_ABORT); (*env)->ReleasePrimitiveArrayCritical(env, jIn, inBufP, JNI_ABORT); + (*env)->ReleasePrimitiveArrayCritical(env, jOut, outBufP, JNI_COMMIT); ckAssertReturnValueOK(env, rv); return ckEncryptedPartLen; @@ -214,7 +214,7 @@ } if (directOut == 0) { - (*env)->ReleasePrimitiveArrayCritical(env, jOut, outBufP, JNI_ABORT); + (*env)->ReleasePrimitiveArrayCritical(env, jOut, outBufP, JNI_COMMIT); } ckAssertReturnValueOK(env, rv); @@ -266,7 +266,7 @@ //printf("EF: ckLastEncryptedPartLen=%i", ckLastEncryptedPartLen); if (directOut == 0) { - (*env)->ReleasePrimitiveArrayCritical(env, jOut, outBufP, JNI_ABORT); + (*env)->ReleasePrimitiveArrayCritical(env, jOut, outBufP, JNI_COMMIT); } ckAssertReturnValueOK(env, rv); @@ -361,8 +361,8 @@ (CK_BYTE_PTR)(outBufP + jOutOfs), &ckPartLen); - (*env)->ReleasePrimitiveArrayCritical(env, jOut, outBufP, JNI_ABORT); (*env)->ReleasePrimitiveArrayCritical(env, jIn, inBufP, JNI_ABORT); + (*env)->ReleasePrimitiveArrayCritical(env, jOut, outBufP, JNI_COMMIT); ckAssertReturnValueOK(env, rv); @@ -429,7 +429,7 @@ } if (directOut == 0) { - (*env)->ReleasePrimitiveArrayCritical(env, jOut, outBufP, JNI_ABORT); + (*env)->ReleasePrimitiveArrayCritical(env, jOut, outBufP, JNI_COMMIT); } ckAssertReturnValueOK(env, rv); @@ -478,7 +478,7 @@ &ckLastPartLen); if (directOut == 0) { - (*env)->ReleasePrimitiveArrayCritical(env, jOut, outBufP, JNI_ABORT); + (*env)->ReleasePrimitiveArrayCritical(env, jOut, outBufP, JNI_COMMIT); } diff -r a73b9a26a9ae -r 1861e9730374 test/sun/security/pkcs11/Cipher/JNICheck.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/security/pkcs11/Cipher/JNICheck.java Sat Nov 08 09:42:45 2014 -0800 @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8063700 + * @run main/othervm -Xcheck:jni JNICheck + */ + +import javax.crypto.Cipher; +import javax.crypto.SealedObject; +import javax.crypto.SecretKey; +import javax.crypto.KeyGenerator; +import java.security.NoSuchProviderException; + +public class JNICheck { + + /* This test is similar to the JCK test that found 8063700. */ + static class SealedObjectTest { + Cipher c; + + SealedObjectTest() throws Exception { + try { + c = Cipher.getInstance("AES", "SunPKCS11-Solaris"); + } catch (NoSuchProviderException nspe) { + System.out.println("No SunPKCS11-Solaris provider. Test skipped"); + return; + } + + String s = "Test string"; + SealedObject so; + SecretKey key = KeyGenerator.getInstance("AES").generateKey(); + + c.init(Cipher.ENCRYPT_MODE, key); + so = new SealedObject(s, c); + + so.getObject(key, "SunPKCS11-Solaris"); + } + } + + public static void main(String args[]) throws Exception { + new SealedObjectTest(); + } +}