updated to security u141.b16
- sync patches with rhel7
This commit is contained in:
parent
aaedfc554e
commit
3c096f37e4
2
.gitignore
vendored
2
.gitignore
vendored
@ -74,3 +74,5 @@
|
|||||||
/aarch64-port-jdk8u-aarch64-jdk8u131-b12.tar.xz
|
/aarch64-port-jdk8u-aarch64-jdk8u131-b12.tar.xz
|
||||||
/aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u131-b12-shenandoah-merge-2017-04-20.tar.xz
|
/aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u131-b12-shenandoah-merge-2017-04-20.tar.xz
|
||||||
/systemtap-tapset-3.4.0pre01.tar.xz
|
/systemtap-tapset-3.4.0pre01.tar.xz
|
||||||
|
/aarch64-port-jdk8u-aarch64-jdk8u141-b16.tar.xz
|
||||||
|
/aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u141-b16.tar.xz
|
||||||
|
@ -1,213 +0,0 @@
|
|||||||
# HG changeset patch
|
|
||||||
# User shshahma
|
|
||||||
# Date 1474535080 25200
|
|
||||||
# Thu Sep 22 02:04:40 2016 -0700
|
|
||||||
# Node ID baf64c88538f477d7f5a0cf90b670108ac312375
|
|
||||||
# Parent 62212568179b76b5ebe7b0129ddeed7b268b0bc0
|
|
||||||
6515172, PR3346: Runtime.availableProcessors() ignores Linux taskset command
|
|
||||||
Summary: extract processor count from sched_getaffinity mask
|
|
||||||
Reviewed-by: dholmes, gthornbr
|
|
||||||
|
|
||||||
diff --git a/src/os/linux/vm/globals_linux.hpp b/src/os/linux/vm/globals_linux.hpp
|
|
||||||
--- openjdk/hotspot/src/os/linux/vm/globals_linux.hpp
|
|
||||||
+++ openjdk/hotspot/src/os/linux/vm/globals_linux.hpp
|
|
||||||
@@ -1,5 +1,5 @@
|
|
||||||
/*
|
|
||||||
- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
|
|
||||||
+ * Copyright (c) 2005, 2016, 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
|
|
||||||
@@ -47,7 +47,10 @@
|
|
||||||
"Load DLLs with executable-stack attribute in the VM Thread") \
|
|
||||||
\
|
|
||||||
product(bool, UseSHM, false, \
|
|
||||||
- "Use SYSV shared memory for large pages")
|
|
||||||
+ "Use SYSV shared memory for large pages") \
|
|
||||||
+ \
|
|
||||||
+ diagnostic(bool, PrintActiveCpus, false, \
|
|
||||||
+ "Print the number of CPUs detected in os::active_processor_count")
|
|
||||||
|
|
||||||
//
|
|
||||||
// Defines Linux-specific default values. The flags are available on all
|
|
||||||
diff --git a/src/os/linux/vm/os_linux.cpp b/src/os/linux/vm/os_linux.cpp
|
|
||||||
--- openjdk/hotspot/src/os/linux/vm/os_linux.cpp
|
|
||||||
+++ openjdk/hotspot/src/os/linux/vm/os_linux.cpp
|
|
||||||
@@ -1,5 +1,5 @@
|
|
||||||
/*
|
|
||||||
- * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
|
|
||||||
+ * Copyright (c) 1999, 2016, 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
|
|
||||||
@@ -104,6 +104,14 @@
|
|
||||||
|
|
||||||
PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
|
|
||||||
|
|
||||||
+#ifndef _GNU_SOURCE
|
|
||||||
+ #define _GNU_SOURCE
|
|
||||||
+ #include <sched.h>
|
|
||||||
+ #undef _GNU_SOURCE
|
|
||||||
+#else
|
|
||||||
+ #include <sched.h>
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
// if RUSAGE_THREAD for getrusage() has not been defined, do it here. The code calling
|
|
||||||
// getrusage() is prepared to handle the associated failure.
|
|
||||||
#ifndef RUSAGE_THREAD
|
|
||||||
@@ -5027,12 +5035,42 @@
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
+static int os_cpu_count(const cpu_set_t* cpus) {
|
|
||||||
+ int count = 0;
|
|
||||||
+ // only look up to the number of configured processors
|
|
||||||
+ for (int i = 0; i < os::processor_count(); i++) {
|
|
||||||
+ if (CPU_ISSET(i, cpus)) {
|
|
||||||
+ count++;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ return count;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+// Get the current number of available processors for this process.
|
|
||||||
+// This value can change at any time during a process's lifetime.
|
|
||||||
+// sched_getaffinity gives an accurate answer as it accounts for cpusets.
|
|
||||||
+// If anything goes wrong we fallback to returning the number of online
|
|
||||||
+// processors - which can be greater than the number available to the process.
|
|
||||||
int os::active_processor_count() {
|
|
||||||
- // Linux doesn't yet have a (official) notion of processor sets,
|
|
||||||
- // so just return the number of online processors.
|
|
||||||
- int online_cpus = ::sysconf(_SC_NPROCESSORS_ONLN);
|
|
||||||
- assert(online_cpus > 0 && online_cpus <= processor_count(), "sanity check");
|
|
||||||
- return online_cpus;
|
|
||||||
+ cpu_set_t cpus; // can represent at most 1024 (CPU_SETSIZE) processors
|
|
||||||
+ int cpus_size = sizeof(cpu_set_t);
|
|
||||||
+ int cpu_count = 0;
|
|
||||||
+
|
|
||||||
+ // pid 0 means the current thread - which we have to assume represents the process
|
|
||||||
+ if (sched_getaffinity(0, cpus_size, &cpus) == 0) {
|
|
||||||
+ cpu_count = os_cpu_count(&cpus);
|
|
||||||
+ if (PrintActiveCpus) {
|
|
||||||
+ tty->print_cr("active_processor_count: sched_getaffinity processor count: %d", cpu_count);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ else {
|
|
||||||
+ cpu_count = ::sysconf(_SC_NPROCESSORS_ONLN);
|
|
||||||
+ warning("sched_getaffinity failed (%s)- using online processor count (%d) "
|
|
||||||
+ "which may exceed available processors", strerror(errno), cpu_count);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ assert(cpu_count > 0 && cpu_count <= processor_count(), "sanity check");
|
|
||||||
+ return cpu_count;
|
|
||||||
}
|
|
||||||
|
|
||||||
void os::set_native_thread_name(const char *name) {
|
|
||||||
diff --git a/test/runtime/os/AvailableProcessors.java b/test/runtime/os/AvailableProcessors.java
|
|
||||||
new file mode 100644
|
|
||||||
--- /dev/null
|
|
||||||
+++ openjdk/hotspot/test/runtime/os/AvailableProcessors.java
|
|
||||||
@@ -0,0 +1,103 @@
|
|
||||||
+/*
|
|
||||||
+ * Copyright (c) 2016, 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.
|
|
||||||
+ */
|
|
||||||
+import java.io.File;
|
|
||||||
+import com.oracle.java.testlibrary.ProcessTools;
|
|
||||||
+import com.oracle.java.testlibrary.OutputAnalyzer;
|
|
||||||
+import java.util.ArrayList;
|
|
||||||
+
|
|
||||||
+/*
|
|
||||||
+ * @test
|
|
||||||
+ * @bug 6515172
|
|
||||||
+ * @summary Check that availableProcessors reports the correct value when running in a cpuset on linux
|
|
||||||
+ * @requires os.family == "linux"
|
|
||||||
+ * @library /testlibrary
|
|
||||||
+ * @build com.oracle.java.testlibrary.*
|
|
||||||
+ * @run driver AvailableProcessors
|
|
||||||
+ */
|
|
||||||
+public class AvailableProcessors {
|
|
||||||
+
|
|
||||||
+ static final String SUCCESS_STRING = "Found expected processors: ";
|
|
||||||
+
|
|
||||||
+ public static void main(String[] args) throws Throwable {
|
|
||||||
+ if (args.length > 0)
|
|
||||||
+ checkProcessors(Integer.parseInt(args[0]));
|
|
||||||
+ else {
|
|
||||||
+ // run ourselves under different cpu configurations
|
|
||||||
+ // using the taskset command
|
|
||||||
+ String taskset;
|
|
||||||
+ final String taskset1 = "/bin/taskset";
|
|
||||||
+ final String taskset2 = "/usr/bin/taskset";
|
|
||||||
+ if (new File(taskset1).exists())
|
|
||||||
+ taskset = taskset1;
|
|
||||||
+ else if (new File(taskset2).exists())
|
|
||||||
+ taskset = taskset2;
|
|
||||||
+ else {
|
|
||||||
+ System.out.println("Skipping test: could not find taskset command");
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ int available = Runtime.getRuntime().availableProcessors();
|
|
||||||
+
|
|
||||||
+ if (available == 1) {
|
|
||||||
+ System.out.println("Skipping test: only one processor available");
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ // Get the java command we want to execute
|
|
||||||
+ // Enable logging for easier failure diagnosis
|
|
||||||
+ ProcessBuilder master =
|
|
||||||
+ ProcessTools.createJavaProcessBuilder(false,
|
|
||||||
+ "-XX:+UnlockDiagnosticVMOptions",
|
|
||||||
+ "-XX:+PrintActiveCpus",
|
|
||||||
+ "AvailableProcessors");
|
|
||||||
+
|
|
||||||
+ int[] expected = new int[] { 1, available/2, available-1, available };
|
|
||||||
+
|
|
||||||
+ for (int i : expected) {
|
|
||||||
+ System.out.println("Testing for " + i + " processors ...");
|
|
||||||
+ int max = i - 1;
|
|
||||||
+ ArrayList<String> cmdline = new ArrayList<>(master.command());
|
|
||||||
+ // prepend taskset command
|
|
||||||
+ cmdline.add(0, "0-" + max);
|
|
||||||
+ cmdline.add(0, "-c");
|
|
||||||
+ cmdline.add(0, taskset);
|
|
||||||
+ // append expected processor count
|
|
||||||
+ cmdline.add(String.valueOf(i));
|
|
||||||
+ ProcessBuilder pb = new ProcessBuilder(cmdline);
|
|
||||||
+ System.out.println("Final command line: " +
|
|
||||||
+ ProcessTools.getCommandLine(pb));
|
|
||||||
+ OutputAnalyzer output = ProcessTools.executeProcess(pb);
|
|
||||||
+ output.shouldContain(SUCCESS_STRING);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ static void checkProcessors(int expected) {
|
|
||||||
+ int available = Runtime.getRuntime().availableProcessors();
|
|
||||||
+ if (available != expected)
|
|
||||||
+ throw new Error("Expected " + expected + " processors, but found "
|
|
||||||
+ + available);
|
|
||||||
+ else
|
|
||||||
+ System.out.println(SUCCESS_STRING + available);
|
|
||||||
+ }
|
|
||||||
+}
|
|
@ -1,911 +0,0 @@
|
|||||||
# HG changeset patch
|
|
||||||
# User rpatil
|
|
||||||
# Date 1474623897 -19800
|
|
||||||
# Fri Sep 23 15:14:57 2016 +0530
|
|
||||||
# Node ID fb617df8fbac42e962219e45cbd29b15b5ecdc63
|
|
||||||
# Parent d41592af9af3790fe5eee30ce686d85cff09c942
|
|
||||||
8144566, PR3352: Custom HostnameVerifier disables SNI extension
|
|
||||||
Reviewed-by: coffeys
|
|
||||||
|
|
||||||
diff --git a/src/share/classes/sun/security/ssl/SSLSocketImpl.java b/src/share/classes/sun/security/ssl/SSLSocketImpl.java
|
|
||||||
--- openjdk/jdk/src/share/classes/sun/security/ssl/SSLSocketImpl.java
|
|
||||||
+++ openjdk/jdk/src/share/classes/sun/security/ssl/SSLSocketImpl.java
|
|
||||||
@@ -1,5 +1,5 @@
|
|
||||||
/*
|
|
||||||
- * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
|
|
||||||
+ * Copyright (c) 1996, 2016, 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
|
|
||||||
@@ -220,6 +220,11 @@
|
|
||||||
Collections.<SNIServerName>emptyList();
|
|
||||||
Collection<SNIMatcher> sniMatchers =
|
|
||||||
Collections.<SNIMatcher>emptyList();
|
|
||||||
+ // Is the serverNames set to empty with SSLParameters.setServerNames()?
|
|
||||||
+ private boolean noSniExtension = false;
|
|
||||||
+
|
|
||||||
+ // Is the sniMatchers set to empty with SSLParameters.setSNIMatchers()?
|
|
||||||
+ private boolean noSniMatcher = false;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* READ ME * READ ME * READ ME * READ ME * READ ME * READ ME *
|
|
||||||
@@ -666,6 +671,11 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
super.connect(endpoint, timeout);
|
|
||||||
+
|
|
||||||
+ if (host == null || host.length() == 0) {
|
|
||||||
+ useImplicitHost(false);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
doneConnect();
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -2158,41 +2168,61 @@
|
|
||||||
output.r.setVersion(protocolVersion);
|
|
||||||
}
|
|
||||||
|
|
||||||
+ //
|
|
||||||
+ // ONLY used by ClientHandshaker for the server hostname during handshaking
|
|
||||||
+ //
|
|
||||||
synchronized String getHost() {
|
|
||||||
// Note that the host may be null or empty for localhost.
|
|
||||||
if (host == null || host.length() == 0) {
|
|
||||||
- if (!trustNameService) {
|
|
||||||
- // If the local name service is not trustworthy, reverse host
|
|
||||||
- // name resolution should not be performed for endpoint
|
|
||||||
- // identification. Use the application original specified
|
|
||||||
- // hostname or IP address instead.
|
|
||||||
- host = getOriginalHostname(getInetAddress());
|
|
||||||
- } else {
|
|
||||||
- host = getInetAddress().getHostName();
|
|
||||||
- }
|
|
||||||
+ useImplicitHost(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
return host;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
- * Get the original application specified hostname.
|
|
||||||
+ * Try to set and use the implicit specified hostname
|
|
||||||
*/
|
|
||||||
- private static String getOriginalHostname(InetAddress inetAddress) {
|
|
||||||
- /*
|
|
||||||
- * Get the original hostname via sun.misc.SharedSecrets.
|
|
||||||
- */
|
|
||||||
+ private synchronized void useImplicitHost(boolean noSniUpdate) {
|
|
||||||
+
|
|
||||||
+ // Note: If the local name service is not trustworthy, reverse
|
|
||||||
+ // host name resolution should not be performed for endpoint
|
|
||||||
+ // identification. Use the application original specified
|
|
||||||
+ // hostname or IP address instead.
|
|
||||||
+
|
|
||||||
+ // Get the original hostname via jdk.internal.misc.SharedSecrets
|
|
||||||
+ InetAddress inetAddress = getInetAddress();
|
|
||||||
+ if (inetAddress == null) { // not connected
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
JavaNetAccess jna = SharedSecrets.getJavaNetAccess();
|
|
||||||
String originalHostname = jna.getOriginalHostName(inetAddress);
|
|
||||||
+ if ((originalHostname != null) &&
|
|
||||||
+ (originalHostname.length() != 0)) {
|
|
||||||
|
|
||||||
- /*
|
|
||||||
- * If no application specified hostname, use the IP address.
|
|
||||||
- */
|
|
||||||
- if (originalHostname == null || originalHostname.length() == 0) {
|
|
||||||
- originalHostname = inetAddress.getHostAddress();
|
|
||||||
+ host = originalHostname;
|
|
||||||
+ if (!noSniUpdate && serverNames.isEmpty() && !noSniExtension) {
|
|
||||||
+ serverNames =
|
|
||||||
+ Utilities.addToSNIServerNameList(serverNames, host);
|
|
||||||
+
|
|
||||||
+ if (!roleIsServer &&
|
|
||||||
+ (handshaker != null) && !handshaker.started()) {
|
|
||||||
+ handshaker.setSNIServerNames(serverNames);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return;
|
|
||||||
}
|
|
||||||
|
|
||||||
- return originalHostname;
|
|
||||||
+ // No explicitly specified hostname, no server name indication.
|
|
||||||
+ if (!trustNameService) {
|
|
||||||
+ // The local name service is not trustworthy, use IP address.
|
|
||||||
+ host = inetAddress.getHostAddress();
|
|
||||||
+ } else {
|
|
||||||
+ // Use the underlying reverse host name resolution service.
|
|
||||||
+ host = getInetAddress().getHostName();
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@@ -2205,6 +2235,10 @@
|
|
||||||
this.host = host;
|
|
||||||
this.serverNames =
|
|
||||||
Utilities.addToSNIServerNameList(this.serverNames, this.host);
|
|
||||||
+
|
|
||||||
+ if (!roleIsServer && (handshaker != null) && !handshaker.started()) {
|
|
||||||
+ handshaker.setSNIServerNames(serverNames);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@@ -2571,8 +2605,21 @@
|
|
||||||
// the super implementation does not handle the following parameters
|
|
||||||
params.setEndpointIdentificationAlgorithm(identificationProtocol);
|
|
||||||
params.setAlgorithmConstraints(algorithmConstraints);
|
|
||||||
- params.setSNIMatchers(sniMatchers);
|
|
||||||
- params.setServerNames(serverNames);
|
|
||||||
+
|
|
||||||
+ if (sniMatchers.isEmpty() && !noSniMatcher) {
|
|
||||||
+ // 'null' indicates none has been set
|
|
||||||
+ params.setSNIMatchers(null);
|
|
||||||
+ } else {
|
|
||||||
+ params.setSNIMatchers(sniMatchers);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (serverNames.isEmpty() && !noSniExtension) {
|
|
||||||
+ // 'null' indicates none has been set
|
|
||||||
+ params.setServerNames(null);
|
|
||||||
+ } else {
|
|
||||||
+ params.setServerNames(serverNames);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
params.setUseCipherSuitesOrder(preferLocalCipherSuites);
|
|
||||||
|
|
||||||
return params;
|
|
||||||
@@ -2592,11 +2639,13 @@
|
|
||||||
|
|
||||||
List<SNIServerName> sniNames = params.getServerNames();
|
|
||||||
if (sniNames != null) {
|
|
||||||
+ noSniExtension = sniNames.isEmpty();
|
|
||||||
serverNames = sniNames;
|
|
||||||
}
|
|
||||||
|
|
||||||
Collection<SNIMatcher> matchers = params.getSNIMatchers();
|
|
||||||
if (matchers != null) {
|
|
||||||
+ noSniMatcher = matchers.isEmpty();
|
|
||||||
sniMatchers = matchers;
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/test/javax/net/ssl/ServerName/BestEffortOnLazyConnected.java b/test/javax/net/ssl/ServerName/BestEffortOnLazyConnected.java
|
|
||||||
new file mode 100644
|
|
||||||
--- /dev/null
|
|
||||||
+++ openjdk/jdk/test/javax/net/ssl/ServerName/BestEffortOnLazyConnected.java
|
|
||||||
@@ -0,0 +1,337 @@
|
|
||||||
+/*
|
|
||||||
+ * Copyright (c) 2016, 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.
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+//
|
|
||||||
+// SunJSSE does not support dynamic system properties, no way to re-use
|
|
||||||
+// system properties in samevm/agentvm mode.
|
|
||||||
+//
|
|
||||||
+
|
|
||||||
+/**
|
|
||||||
+ * @test
|
|
||||||
+ * @bug 8144566
|
|
||||||
+ * @summary Custom HostnameVerifier disables SNI extension
|
|
||||||
+ * @run main/othervm BestEffortOnLazyConnected
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+import java.io.*;
|
|
||||||
+import java.nio.*;
|
|
||||||
+import java.nio.channels.*;
|
|
||||||
+import java.util.*;
|
|
||||||
+import java.net.*;
|
|
||||||
+import javax.net.ssl.*;
|
|
||||||
+
|
|
||||||
+public class BestEffortOnLazyConnected {
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * =============================================================
|
|
||||||
+ * Set the various variables needed for the tests, then
|
|
||||||
+ * specify what tests to run on each side.
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Should we run the client or server in a separate thread?
|
|
||||||
+ * Both sides can throw exceptions, but do you have a preference
|
|
||||||
+ * as to which side should be the main thread.
|
|
||||||
+ */
|
|
||||||
+ private static final boolean separateServerThread = true;
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Where do we find the keystores?
|
|
||||||
+ */
|
|
||||||
+ private static final String pathToStores = "../../../../sun/security/ssl/etc";
|
|
||||||
+ private static final String keyStoreFile = "keystore";
|
|
||||||
+ private static final String trustStoreFile = "truststore";
|
|
||||||
+ private static final String passwd = "passphrase";
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Is the server ready to serve?
|
|
||||||
+ */
|
|
||||||
+ private static volatile boolean serverReady = false;
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Turn on SSL debugging?
|
|
||||||
+ */
|
|
||||||
+ private static final boolean debug = false;
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * the fully qualified domain name of localhost
|
|
||||||
+ */
|
|
||||||
+ private static String hostname = null;
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * If the client or server is doing some kind of object creation
|
|
||||||
+ * that the other side depends on, and that thread prematurely
|
|
||||||
+ * exits, you may experience a hang. The test harness will
|
|
||||||
+ * terminate all hung threads after its timeout has expired,
|
|
||||||
+ * currently 3 minutes by default, but you might try to be
|
|
||||||
+ * smart about it....
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Define the server side of the test.
|
|
||||||
+ *
|
|
||||||
+ * If the server prematurely exits, serverReady will be set to true
|
|
||||||
+ * to avoid infinite hangs.
|
|
||||||
+ */
|
|
||||||
+ private void doServerSide() throws Exception {
|
|
||||||
+ SSLServerSocketFactory sslssf =
|
|
||||||
+ (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
|
|
||||||
+ try (SSLServerSocket sslServerSocket =
|
|
||||||
+ (SSLServerSocket) sslssf.createServerSocket(serverPort)) {
|
|
||||||
+
|
|
||||||
+ serverPort = sslServerSocket.getLocalPort();
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Signal Client, we're ready for his connect.
|
|
||||||
+ */
|
|
||||||
+ serverReady = true;
|
|
||||||
+
|
|
||||||
+ try (SSLSocket sslSocket = (SSLSocket)sslServerSocket.accept()) {
|
|
||||||
+ InputStream sslIS = sslSocket.getInputStream();
|
|
||||||
+ OutputStream sslOS = sslSocket.getOutputStream();
|
|
||||||
+
|
|
||||||
+ sslIS.read();
|
|
||||||
+ sslOS.write(85);
|
|
||||||
+ sslOS.flush();
|
|
||||||
+
|
|
||||||
+ ExtendedSSLSession session =
|
|
||||||
+ (ExtendedSSLSession)sslSocket.getSession();
|
|
||||||
+ if (session.getRequestedServerNames().isEmpty()) {
|
|
||||||
+ throw new Exception("No expected Server Name Indication");
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Define the client side of the test.
|
|
||||||
+ *
|
|
||||||
+ * If the server prematurely exits, serverReady will be set to true
|
|
||||||
+ * to avoid infinite hangs.
|
|
||||||
+ */
|
|
||||||
+ private void doClientSide() throws Exception {
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Wait for server to get started.
|
|
||||||
+ */
|
|
||||||
+ while (!serverReady) {
|
|
||||||
+ Thread.sleep(50);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ SSLSocketFactory sslsf =
|
|
||||||
+ (SSLSocketFactory) SSLSocketFactory.getDefault();
|
|
||||||
+
|
|
||||||
+ try (SSLSocket sslSocket = (SSLSocket)sslsf.createSocket()) {
|
|
||||||
+
|
|
||||||
+ sslSocket.connect(new InetSocketAddress(hostname, serverPort), 0);
|
|
||||||
+
|
|
||||||
+ InputStream sslIS = sslSocket.getInputStream();
|
|
||||||
+ OutputStream sslOS = sslSocket.getOutputStream();
|
|
||||||
+
|
|
||||||
+ sslOS.write(280);
|
|
||||||
+ sslOS.flush();
|
|
||||||
+ sslIS.read();
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * =============================================================
|
|
||||||
+ * The remainder is just support stuff
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+ // use any free port by default
|
|
||||||
+ private volatile int serverPort = 0;
|
|
||||||
+
|
|
||||||
+ private volatile Exception serverException = null;
|
|
||||||
+ private volatile Exception clientException = null;
|
|
||||||
+
|
|
||||||
+ public static void main(String[] args) throws Exception {
|
|
||||||
+ String keyFilename =
|
|
||||||
+ System.getProperty("test.src", ".") + "/" + pathToStores +
|
|
||||||
+ "/" + keyStoreFile;
|
|
||||||
+ String trustFilename =
|
|
||||||
+ System.getProperty("test.src", ".") + "/" + pathToStores +
|
|
||||||
+ "/" + trustStoreFile;
|
|
||||||
+
|
|
||||||
+ System.setProperty("javax.net.ssl.keyStore", keyFilename);
|
|
||||||
+ System.setProperty("javax.net.ssl.keyStorePassword", passwd);
|
|
||||||
+ System.setProperty("javax.net.ssl.trustStore", trustFilename);
|
|
||||||
+ System.setProperty("javax.net.ssl.trustStorePassword", passwd);
|
|
||||||
+
|
|
||||||
+ if (debug) {
|
|
||||||
+ System.setProperty("javax.net.debug", "all");
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ try {
|
|
||||||
+ hostname = InetAddress.getLocalHost().getCanonicalHostName();
|
|
||||||
+ } catch (UnknownHostException uhe) {
|
|
||||||
+ System.out.println(
|
|
||||||
+ "Ignore the test as the local hostname cannot be determined");
|
|
||||||
+
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ System.out.println(
|
|
||||||
+ "The fully qualified domain name of the local host is " +
|
|
||||||
+ hostname);
|
|
||||||
+ // Ignore the test if the hostname does not sound like a domain name.
|
|
||||||
+ if ((hostname == null) || hostname.isEmpty() ||
|
|
||||||
+ hostname.startsWith("localhost") ||
|
|
||||||
+ Character.isDigit(hostname.charAt(hostname.length() - 1))) {
|
|
||||||
+
|
|
||||||
+ System.out.println("Ignore the test as the local hostname " +
|
|
||||||
+ "cannot be determined as fully qualified domain name");
|
|
||||||
+
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Start the tests.
|
|
||||||
+ */
|
|
||||||
+ new BestEffortOnLazyConnected();
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ private Thread clientThread = null;
|
|
||||||
+ private Thread serverThread = null;
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Primary constructor, used to drive remainder of the test.
|
|
||||||
+ *
|
|
||||||
+ * Fork off the other side, then do your work.
|
|
||||||
+ */
|
|
||||||
+ BestEffortOnLazyConnected() throws Exception {
|
|
||||||
+ try {
|
|
||||||
+ if (separateServerThread) {
|
|
||||||
+ startServer(true);
|
|
||||||
+ startClient(false);
|
|
||||||
+ } else {
|
|
||||||
+ startClient(true);
|
|
||||||
+ startServer(false);
|
|
||||||
+ }
|
|
||||||
+ } catch (Exception e) {
|
|
||||||
+ // swallow for now. Show later
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Wait for other side to close down.
|
|
||||||
+ */
|
|
||||||
+ if (separateServerThread) {
|
|
||||||
+ serverThread.join();
|
|
||||||
+ } else {
|
|
||||||
+ clientThread.join();
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * When we get here, the test is pretty much over.
|
|
||||||
+ * Which side threw the error?
|
|
||||||
+ */
|
|
||||||
+ Exception local;
|
|
||||||
+ Exception remote;
|
|
||||||
+ String whichRemote;
|
|
||||||
+
|
|
||||||
+ if (separateServerThread) {
|
|
||||||
+ remote = serverException;
|
|
||||||
+ local = clientException;
|
|
||||||
+ whichRemote = "server";
|
|
||||||
+ } else {
|
|
||||||
+ remote = clientException;
|
|
||||||
+ local = serverException;
|
|
||||||
+ whichRemote = "client";
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * If both failed, return the curthread's exception, but also
|
|
||||||
+ * print the remote side Exception
|
|
||||||
+ */
|
|
||||||
+ if ((local != null) && (remote != null)) {
|
|
||||||
+ System.out.println(whichRemote + " also threw:");
|
|
||||||
+ remote.printStackTrace();
|
|
||||||
+ System.out.println();
|
|
||||||
+ throw local;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (remote != null) {
|
|
||||||
+ throw remote;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (local != null) {
|
|
||||||
+ throw local;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ private void startServer(boolean newThread) throws Exception {
|
|
||||||
+ if (newThread) {
|
|
||||||
+ serverThread = new Thread() {
|
|
||||||
+ public void run() {
|
|
||||||
+ try {
|
|
||||||
+ doServerSide();
|
|
||||||
+ } catch (Exception e) {
|
|
||||||
+ /*
|
|
||||||
+ * Our server thread just died.
|
|
||||||
+ *
|
|
||||||
+ * Release the client, if not active already...
|
|
||||||
+ */
|
|
||||||
+ System.err.println("Server died...");
|
|
||||||
+ serverReady = true;
|
|
||||||
+ serverException = e;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ };
|
|
||||||
+ serverThread.start();
|
|
||||||
+ } else {
|
|
||||||
+ try {
|
|
||||||
+ doServerSide();
|
|
||||||
+ } catch (Exception e) {
|
|
||||||
+ serverException = e;
|
|
||||||
+ } finally {
|
|
||||||
+ serverReady = true;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ private void startClient(boolean newThread) throws Exception {
|
|
||||||
+ if (newThread) {
|
|
||||||
+ clientThread = new Thread() {
|
|
||||||
+ public void run() {
|
|
||||||
+ try {
|
|
||||||
+ doClientSide();
|
|
||||||
+ } catch (Exception e) {
|
|
||||||
+ /*
|
|
||||||
+ * Our client thread just died.
|
|
||||||
+ */
|
|
||||||
+ System.err.println("Client died...");
|
|
||||||
+ clientException = e;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ };
|
|
||||||
+ clientThread.start();
|
|
||||||
+ } else {
|
|
||||||
+ try {
|
|
||||||
+ doClientSide();
|
|
||||||
+ } catch (Exception e) {
|
|
||||||
+ clientException = e;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
diff --git a/test/sun/net/www/protocol/https/HttpsURLConnection/ImpactOnSNI.java b/test/sun/net/www/protocol/https/HttpsURLConnection/ImpactOnSNI.java
|
|
||||||
new file mode 100644
|
|
||||||
--- /dev/null
|
|
||||||
+++ openjdk/jdk/test/sun/net/www/protocol/https/HttpsURLConnection/ImpactOnSNI.java
|
|
||||||
@@ -0,0 +1,390 @@
|
|
||||||
+/*
|
|
||||||
+ * Copyright (c) 2016, 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.
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+//
|
|
||||||
+// SunJSSE does not support dynamic system properties, no way to re-use
|
|
||||||
+// system properties in samevm/agentvm mode.
|
|
||||||
+//
|
|
||||||
+
|
|
||||||
+/*
|
|
||||||
+ * @test
|
|
||||||
+ * @bug 8144566
|
|
||||||
+ * @summary Custom HostnameVerifier disables SNI extension
|
|
||||||
+ * @run main/othervm ImpactOnSNI
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+import java.io.*;
|
|
||||||
+import java.net.*;
|
|
||||||
+import javax.net.ssl.*;
|
|
||||||
+
|
|
||||||
+public class ImpactOnSNI {
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * =============================================================
|
|
||||||
+ * Set the various variables needed for the tests, then
|
|
||||||
+ * specify what tests to run on each side.
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Should we run the client or server in a separate thread?
|
|
||||||
+ * Both sides can throw exceptions, but do you have a preference
|
|
||||||
+ * as to which side should be the main thread.
|
|
||||||
+ */
|
|
||||||
+ private static final boolean separateServerThread = true;
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Where do we find the keystores?
|
|
||||||
+ */
|
|
||||||
+ private static final String pathToStores =
|
|
||||||
+ "../../../../../../sun/security/ssl/etc";
|
|
||||||
+ private static final String keyStoreFile = "keystore";
|
|
||||||
+ private static final String trustStoreFile = "truststore";
|
|
||||||
+ private static final String passwd = "passphrase";
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Is the server ready to serve?
|
|
||||||
+ */
|
|
||||||
+ private static volatile boolean serverReady = false;
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Is the connection ready to close?
|
|
||||||
+ */
|
|
||||||
+ private static volatile boolean closeReady = false;
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Turn on SSL debugging?
|
|
||||||
+ */
|
|
||||||
+ private static final boolean debug = false;
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Message posted
|
|
||||||
+ */
|
|
||||||
+ private static final String postMsg = "HTTP post on a https server";
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * the fully qualified domain name of localhost
|
|
||||||
+ */
|
|
||||||
+ private static String hostname = null;
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * If the client or server is doing some kind of object creation
|
|
||||||
+ * that the other side depends on, and that thread prematurely
|
|
||||||
+ * exits, you may experience a hang. The test harness will
|
|
||||||
+ * terminate all hung threads after its timeout has expired,
|
|
||||||
+ * currently 3 minutes by default, but you might try to be
|
|
||||||
+ * smart about it....
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Define the server side of the test.
|
|
||||||
+ *
|
|
||||||
+ * If the server prematurely exits, serverReady will be set to true
|
|
||||||
+ * to avoid infinite hangs.
|
|
||||||
+ */
|
|
||||||
+ private void doServerSide() throws Exception {
|
|
||||||
+ SSLServerSocketFactory sslssf =
|
|
||||||
+ (SSLServerSocketFactory)SSLServerSocketFactory.getDefault();
|
|
||||||
+ try (SSLServerSocket sslServerSocket =
|
|
||||||
+ (SSLServerSocket)sslssf.createServerSocket(serverPort)) {
|
|
||||||
+
|
|
||||||
+ serverPort = sslServerSocket.getLocalPort();
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Signal Client, we're ready for his connect.
|
|
||||||
+ */
|
|
||||||
+ serverReady = true;
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Accept connections
|
|
||||||
+ */
|
|
||||||
+ try (SSLSocket sslSocket = (SSLSocket)sslServerSocket.accept()) {
|
|
||||||
+ InputStream sslIS = sslSocket.getInputStream();
|
|
||||||
+ OutputStream sslOS = sslSocket.getOutputStream();
|
|
||||||
+ BufferedReader br =
|
|
||||||
+ new BufferedReader(new InputStreamReader(sslIS));
|
|
||||||
+ PrintStream ps = new PrintStream(sslOS);
|
|
||||||
+
|
|
||||||
+ // process HTTP POST request from client
|
|
||||||
+ System.out.println("status line: " + br.readLine());
|
|
||||||
+ String msg = null;
|
|
||||||
+ while ((msg = br.readLine()) != null && msg.length() > 0);
|
|
||||||
+
|
|
||||||
+ msg = br.readLine();
|
|
||||||
+ if (msg.equals(postMsg)) {
|
|
||||||
+ ps.println("HTTP/1.1 200 OK\n\n");
|
|
||||||
+ } else {
|
|
||||||
+ ps.println("HTTP/1.1 500 Not OK\n\n");
|
|
||||||
+ }
|
|
||||||
+ ps.flush();
|
|
||||||
+
|
|
||||||
+ ExtendedSSLSession session =
|
|
||||||
+ (ExtendedSSLSession)sslSocket.getSession();
|
|
||||||
+ if (session.getRequestedServerNames().isEmpty()) {
|
|
||||||
+ throw new Exception("No expected Server Name Indication");
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ // close the socket
|
|
||||||
+ while (!closeReady) {
|
|
||||||
+ Thread.sleep(50);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Define the client side of the test.
|
|
||||||
+ *
|
|
||||||
+ * If the server prematurely exits, serverReady will be set to true
|
|
||||||
+ * to avoid infinite hangs.
|
|
||||||
+ */
|
|
||||||
+ private void doClientSide() throws Exception {
|
|
||||||
+ /*
|
|
||||||
+ * Wait for server to get started.
|
|
||||||
+ */
|
|
||||||
+ while (!serverReady) {
|
|
||||||
+ Thread.sleep(50);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ // Send HTTP POST request to server
|
|
||||||
+ URL url = new URL("https://" + hostname + ":" + serverPort);
|
|
||||||
+
|
|
||||||
+ HttpsURLConnection.setDefaultHostnameVerifier(new NameVerifier());
|
|
||||||
+ HttpsURLConnection http = (HttpsURLConnection)url.openConnection();
|
|
||||||
+ http.setDoOutput(true);
|
|
||||||
+
|
|
||||||
+ http.setRequestMethod("POST");
|
|
||||||
+ PrintStream ps = new PrintStream(http.getOutputStream());
|
|
||||||
+ try {
|
|
||||||
+ ps.println(postMsg);
|
|
||||||
+ ps.flush();
|
|
||||||
+ if (http.getResponseCode() != 200) {
|
|
||||||
+ throw new RuntimeException("test Failed");
|
|
||||||
+ }
|
|
||||||
+ } finally {
|
|
||||||
+ ps.close();
|
|
||||||
+ http.disconnect();
|
|
||||||
+ closeReady = true;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ private static class NameVerifier implements HostnameVerifier {
|
|
||||||
+ public boolean verify(String hostname, SSLSession session) {
|
|
||||||
+ return true;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * =============================================================
|
|
||||||
+ * The remainder is just support stuff
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+ // use any free port by default
|
|
||||||
+ private volatile int serverPort = 0;
|
|
||||||
+
|
|
||||||
+ private volatile Exception serverException = null;
|
|
||||||
+ private volatile Exception clientException = null;
|
|
||||||
+
|
|
||||||
+ public static void main(String[] args) throws Exception {
|
|
||||||
+ String keyFilename =
|
|
||||||
+ System.getProperty("test.src", "./") + "/" + pathToStores +
|
|
||||||
+ "/" + keyStoreFile;
|
|
||||||
+ String trustFilename =
|
|
||||||
+ System.getProperty("test.src", "./") + "/" + pathToStores +
|
|
||||||
+ "/" + trustStoreFile;
|
|
||||||
+
|
|
||||||
+ System.setProperty("javax.net.ssl.keyStore", keyFilename);
|
|
||||||
+ System.setProperty("javax.net.ssl.keyStorePassword", passwd);
|
|
||||||
+ System.setProperty("javax.net.ssl.trustStore", trustFilename);
|
|
||||||
+ System.setProperty("javax.net.ssl.trustStorePassword", passwd);
|
|
||||||
+
|
|
||||||
+ if (debug) {
|
|
||||||
+ System.setProperty("javax.net.debug", "all");
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ try {
|
|
||||||
+ hostname = InetAddress.getLocalHost().getCanonicalHostName();
|
|
||||||
+ } catch (UnknownHostException uhe) {
|
|
||||||
+ System.out.println(
|
|
||||||
+ "Ignore the test as the local hostname cannot be determined");
|
|
||||||
+
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ System.out.println(
|
|
||||||
+ "The fully qualified domain name of the local host is " +
|
|
||||||
+ hostname);
|
|
||||||
+ // Ignore the test if the hostname does not sound like a domain name.
|
|
||||||
+ if ((hostname == null) || hostname.isEmpty() ||
|
|
||||||
+ hostname.startsWith("localhost") ||
|
|
||||||
+ Character.isDigit(hostname.charAt(hostname.length() - 1))) {
|
|
||||||
+
|
|
||||||
+ System.out.println("Ignore the test as the local hostname " +
|
|
||||||
+ "cannot be determined as fully qualified domain name");
|
|
||||||
+
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Start the tests.
|
|
||||||
+ */
|
|
||||||
+ new ImpactOnSNI();
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ private Thread clientThread = null;
|
|
||||||
+ private Thread serverThread = null;
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Primary constructor, used to drive remainder of the test.
|
|
||||||
+ *
|
|
||||||
+ * Fork off the other side, then do your work.
|
|
||||||
+ */
|
|
||||||
+ ImpactOnSNI() throws Exception {
|
|
||||||
+ Exception startException = null;
|
|
||||||
+ try {
|
|
||||||
+ if (separateServerThread) {
|
|
||||||
+ startServer(true);
|
|
||||||
+ startClient(false);
|
|
||||||
+ } else {
|
|
||||||
+ startClient(true);
|
|
||||||
+ startServer(false);
|
|
||||||
+ }
|
|
||||||
+ } catch (Exception e) {
|
|
||||||
+ startException = e;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Wait for other side to close down.
|
|
||||||
+ */
|
|
||||||
+ if (separateServerThread) {
|
|
||||||
+ if (serverThread != null) {
|
|
||||||
+ serverThread.join();
|
|
||||||
+ }
|
|
||||||
+ } else {
|
|
||||||
+ if (clientThread != null) {
|
|
||||||
+ clientThread.join();
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * When we get here, the test is pretty much over.
|
|
||||||
+ * Which side threw the error?
|
|
||||||
+ */
|
|
||||||
+ Exception local;
|
|
||||||
+ Exception remote;
|
|
||||||
+
|
|
||||||
+ if (separateServerThread) {
|
|
||||||
+ remote = serverException;
|
|
||||||
+ local = clientException;
|
|
||||||
+ } else {
|
|
||||||
+ remote = clientException;
|
|
||||||
+ local = serverException;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ Exception exception = null;
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Check various exception conditions.
|
|
||||||
+ */
|
|
||||||
+ if ((local != null) && (remote != null)) {
|
|
||||||
+ // If both failed, return the curthread's exception.
|
|
||||||
+ local.initCause(remote);
|
|
||||||
+ exception = local;
|
|
||||||
+ } else if (local != null) {
|
|
||||||
+ exception = local;
|
|
||||||
+ } else if (remote != null) {
|
|
||||||
+ exception = remote;
|
|
||||||
+ } else if (startException != null) {
|
|
||||||
+ exception = startException;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * If there was an exception *AND* a startException,
|
|
||||||
+ * output it.
|
|
||||||
+ */
|
|
||||||
+ if (exception != null) {
|
|
||||||
+ if (exception != startException && startException != null) {
|
|
||||||
+ exception.addSuppressed(startException);
|
|
||||||
+ }
|
|
||||||
+ throw exception;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ // Fall-through: no exception to throw!
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ private void startServer(boolean newThread) throws Exception {
|
|
||||||
+ if (newThread) {
|
|
||||||
+ serverThread = new Thread() {
|
|
||||||
+ @Override
|
|
||||||
+ public void run() {
|
|
||||||
+ try {
|
|
||||||
+ doServerSide();
|
|
||||||
+ } catch (Exception e) {
|
|
||||||
+ /*
|
|
||||||
+ * Our server thread just died.
|
|
||||||
+ *
|
|
||||||
+ * Release the client, if not active already...
|
|
||||||
+ */
|
|
||||||
+ System.err.println("Server died...");
|
|
||||||
+ serverReady = true;
|
|
||||||
+ serverException = e;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ };
|
|
||||||
+ serverThread.start();
|
|
||||||
+ } else {
|
|
||||||
+ try {
|
|
||||||
+ doServerSide();
|
|
||||||
+ } catch (Exception e) {
|
|
||||||
+ serverException = e;
|
|
||||||
+ } finally {
|
|
||||||
+ serverReady = true;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ private void startClient(boolean newThread) throws Exception {
|
|
||||||
+ if (newThread) {
|
|
||||||
+ clientThread = new Thread() {
|
|
||||||
+ @Override
|
|
||||||
+ public void run() {
|
|
||||||
+ try {
|
|
||||||
+ doClientSide();
|
|
||||||
+ } catch (Exception e) {
|
|
||||||
+ /*
|
|
||||||
+ * Our client thread just died.
|
|
||||||
+ */
|
|
||||||
+ System.err.println("Client died...");
|
|
||||||
+ clientException = e;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ };
|
|
||||||
+ clientThread.start();
|
|
||||||
+ } else {
|
|
||||||
+ try {
|
|
||||||
+ doClientSide();
|
|
||||||
+ } catch (Exception e) {
|
|
||||||
+ clientException = e;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+}
|
|
@ -1,41 +0,0 @@
|
|||||||
# HG changeset patch
|
|
||||||
# User rhalade
|
|
||||||
# Date 1463420211 25200
|
|
||||||
# Mon May 16 10:36:51 2016 -0700
|
|
||||||
# Node ID c0e856f2dacdf5eb5cdea380da32ba210aee9579
|
|
||||||
# Parent fb617df8fbac42e962219e45cbd29b15b5ecdc63
|
|
||||||
8155049, PR3352: New tests from 8144566 fail with "No expected Server Name Indication"
|
|
||||||
Reviewed-by: xuelei
|
|
||||||
|
|
||||||
diff --git a/test/javax/net/ssl/ServerName/BestEffortOnLazyConnected.java b/test/javax/net/ssl/ServerName/BestEffortOnLazyConnected.java
|
|
||||||
--- openjdk/jdk/test/javax/net/ssl/ServerName/BestEffortOnLazyConnected.java
|
|
||||||
+++ openjdk/jdk/test/javax/net/ssl/ServerName/BestEffortOnLazyConnected.java
|
|
||||||
@@ -34,9 +34,6 @@
|
|
||||||
*/
|
|
||||||
|
|
||||||
import java.io.*;
|
|
||||||
-import java.nio.*;
|
|
||||||
-import java.nio.channels.*;
|
|
||||||
-import java.util.*;
|
|
||||||
import java.net.*;
|
|
||||||
import javax.net.ssl.*;
|
|
||||||
|
|
||||||
@@ -197,6 +194,7 @@
|
|
||||||
hostname);
|
|
||||||
// Ignore the test if the hostname does not sound like a domain name.
|
|
||||||
if ((hostname == null) || hostname.isEmpty() ||
|
|
||||||
+ !hostname.contains(".") || hostname.endsWith(".") ||
|
|
||||||
hostname.startsWith("localhost") ||
|
|
||||||
Character.isDigit(hostname.charAt(hostname.length() - 1))) {
|
|
||||||
|
|
||||||
diff --git a/test/sun/net/www/protocol/https/HttpsURLConnection/ImpactOnSNI.java b/test/sun/net/www/protocol/https/HttpsURLConnection/ImpactOnSNI.java
|
|
||||||
--- openjdk/jdk/test/sun/net/www/protocol/https/HttpsURLConnection/ImpactOnSNI.java
|
|
||||||
+++ openjdk/jdk/test/sun/net/www/protocol/https/HttpsURLConnection/ImpactOnSNI.java
|
|
||||||
@@ -235,6 +235,7 @@
|
|
||||||
hostname);
|
|
||||||
// Ignore the test if the hostname does not sound like a domain name.
|
|
||||||
if ((hostname == null) || hostname.isEmpty() ||
|
|
||||||
+ !hostname.contains(".") || hostname.endsWith(".") ||
|
|
||||||
hostname.startsWith("localhost") ||
|
|
||||||
Character.isDigit(hostname.charAt(hostname.length() - 1))) {
|
|
||||||
|
|
@ -1,48 +0,0 @@
|
|||||||
# HG changeset patch
|
|
||||||
# User horii
|
|
||||||
# Date 1473905514 14400
|
|
||||||
# Wed Sep 14 22:11:54 2016 -0400
|
|
||||||
# Node ID 8d16f74380a78eb76cb33183a64440316393903e
|
|
||||||
# Parent be698ac288484ab140715ee29ed9335e6ea8a33b
|
|
||||||
8165231: java.nio.Bits.unaligned() doesn't return true on ppc
|
|
||||||
Reviewed-by: simonis, coffeys
|
|
||||||
|
|
||||||
diff --git a/src/share/classes/java/nio/Bits.java b/src/share/classes/java/nio/Bits.java
|
|
||||||
--- openjdk/jdk/src/share/classes/java/nio/Bits.java
|
|
||||||
+++ openjdk/jdk/src/share/classes/java/nio/Bits.java
|
|
||||||
@@ -1,5 +1,5 @@
|
|
||||||
/*
|
|
||||||
- * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
|
|
||||||
+ * Copyright (c) 2000, 2016, 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
|
|
||||||
@@ -614,7 +614,8 @@
|
|
||||||
String arch = AccessController.doPrivileged(
|
|
||||||
new sun.security.action.GetPropertyAction("os.arch"));
|
|
||||||
unaligned = arch.equals("i386") || arch.equals("x86")
|
|
||||||
- || arch.equals("amd64") || arch.equals("x86_64");
|
|
||||||
+ || arch.equals("amd64") || arch.equals("x86_64")
|
|
||||||
+ || arch.equals("ppc64") || arch.equals("ppc64le");
|
|
||||||
unalignedKnown = true;
|
|
||||||
return unaligned;
|
|
||||||
}
|
|
||||||
diff --git a/src/share/classes/sun/security/provider/ByteArrayAccess.java b/src/share/classes/sun/security/provider/ByteArrayAccess.java
|
|
||||||
--- openjdk/jdk/src/share/classes/sun/security/provider/ByteArrayAccess.java
|
|
||||||
+++ openjdk/jdk/src/share/classes/sun/security/provider/ByteArrayAccess.java
|
|
||||||
@@ -1,5 +1,5 @@
|
|
||||||
/*
|
|
||||||
- * Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved.
|
|
||||||
+ * Copyright (c) 2006, 2016, 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
|
|
||||||
@@ -94,7 +94,7 @@
|
|
||||||
String arch = java.security.AccessController.doPrivileged
|
|
||||||
(new sun.security.action.GetPropertyAction("os.arch", ""));
|
|
||||||
return arch.equals("i386") || arch.equals("x86") || arch.equals("amd64")
|
|
||||||
- || arch.equals("x86_64");
|
|
||||||
+ || arch.equals("x86_64") || arch.equals("ppc64") || arch.equals("ppc64le");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
@ -1,79 +0,0 @@
|
|||||||
# HG changeset patch
|
|
||||||
# User roland
|
|
||||||
# Date 1487208397 28800
|
|
||||||
# Wed Feb 15 17:26:37 2017 -0800
|
|
||||||
# Node ID a9cbaff50d3d7e3a1d2dbdc0121c470142b87270
|
|
||||||
# Parent 15922b2f31db4857ec84efdf533c41b19e68030b
|
|
||||||
8174164, PR3334, RH1417266: SafePointNode::_replaced_nodes breaks with irreducible loops
|
|
||||||
Reviewed-by: kvn
|
|
||||||
|
|
||||||
diff --git a/src/share/vm/opto/callnode.hpp b/src/share/vm/opto/callnode.hpp
|
|
||||||
--- openjdk/hotspot/src/share/vm/opto/callnode.hpp
|
|
||||||
+++ openjdk/hotspot/src/share/vm/opto/callnode.hpp
|
|
||||||
@@ -449,8 +449,8 @@
|
|
||||||
void delete_replaced_nodes() {
|
|
||||||
_replaced_nodes.reset();
|
|
||||||
}
|
|
||||||
- void apply_replaced_nodes() {
|
|
||||||
- _replaced_nodes.apply(this);
|
|
||||||
+ void apply_replaced_nodes(uint idx) {
|
|
||||||
+ _replaced_nodes.apply(this, idx);
|
|
||||||
}
|
|
||||||
void merge_replaced_nodes_with(SafePointNode* sfpt) {
|
|
||||||
_replaced_nodes.merge_with(sfpt->_replaced_nodes);
|
|
||||||
diff --git a/src/share/vm/opto/parse1.cpp b/src/share/vm/opto/parse1.cpp
|
|
||||||
--- openjdk/hotspot/src/share/vm/opto/parse1.cpp
|
|
||||||
+++ openjdk/hotspot/src/share/vm/opto/parse1.cpp
|
|
||||||
@@ -1048,7 +1048,7 @@
|
|
||||||
kit.make_dtrace_method_exit(method());
|
|
||||||
}
|
|
||||||
if (_replaced_nodes_for_exceptions) {
|
|
||||||
- kit.map()->apply_replaced_nodes();
|
|
||||||
+ kit.map()->apply_replaced_nodes(_new_idx);
|
|
||||||
}
|
|
||||||
// Done with exception-path processing.
|
|
||||||
ex_map = kit.make_exception_state(ex_oop);
|
|
||||||
@@ -1069,7 +1069,7 @@
|
|
||||||
_exits.add_exception_state(ex_map);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
- _exits.map()->apply_replaced_nodes();
|
|
||||||
+ _exits.map()->apply_replaced_nodes(_new_idx);
|
|
||||||
}
|
|
||||||
|
|
||||||
//-----------------------------create_entry_map-------------------------------
|
|
||||||
diff --git a/src/share/vm/opto/replacednodes.cpp b/src/share/vm/opto/replacednodes.cpp
|
|
||||||
--- openjdk/hotspot/src/share/vm/opto/replacednodes.cpp
|
|
||||||
+++ openjdk/hotspot/src/share/vm/opto/replacednodes.cpp
|
|
||||||
@@ -91,13 +91,17 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
// Perfom node replacement (used when returning to caller)
|
|
||||||
-void ReplacedNodes::apply(Node* n) {
|
|
||||||
+void ReplacedNodes::apply(Node* n, uint idx) {
|
|
||||||
if (is_empty()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
for (int i = 0; i < _replaced_nodes->length(); i++) {
|
|
||||||
ReplacedNode replaced = _replaced_nodes->at(i);
|
|
||||||
- n->replace_edge(replaced.initial(), replaced.improved());
|
|
||||||
+ // Only apply if improved node was created in a callee to avoid
|
|
||||||
+ // issues with irreducible loops in the caller
|
|
||||||
+ if (replaced.improved()->_idx >= idx) {
|
|
||||||
+ n->replace_edge(replaced.initial(), replaced.improved());
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/src/share/vm/opto/replacednodes.hpp b/src/share/vm/opto/replacednodes.hpp
|
|
||||||
--- openjdk/hotspot/src/share/vm/opto/replacednodes.hpp
|
|
||||||
+++ openjdk/hotspot/src/share/vm/opto/replacednodes.hpp
|
|
||||||
@@ -71,7 +71,7 @@
|
|
||||||
void record(Node* initial, Node* improved);
|
|
||||||
void transfer_from(const ReplacedNodes& other, uint idx);
|
|
||||||
void reset();
|
|
||||||
- void apply(Node* n);
|
|
||||||
+ void apply(Node* n, uint idx);
|
|
||||||
void merge_with(const ReplacedNodes& other);
|
|
||||||
bool is_empty() const;
|
|
||||||
void dump(outputStream *st) const;
|
|
@ -1,122 +0,0 @@
|
|||||||
# HG changeset patch
|
|
||||||
# User adinn
|
|
||||||
# Date 1487931564 0
|
|
||||||
# Fri Feb 24 10:19:24 2017 +0000
|
|
||||||
# Node ID d41592af9af3790fe5eee30ce686d85cff09c942
|
|
||||||
# Parent 1ac9b0f1bf17fc5935bfa8250550eabc2ffb6785
|
|
||||||
8174729, PR3336, RH1420518: Race Condition in java.lang.reflect.WeakCache
|
|
||||||
Summary: Race can occur between Proxy.getProxyClass and Proxy.isProxyClass
|
|
||||||
Reviewed-by: mchung
|
|
||||||
|
|
||||||
diff --git a/src/share/classes/java/lang/reflect/WeakCache.java b/src/share/classes/java/lang/reflect/WeakCache.java
|
|
||||||
--- openjdk/jdk/src/share/classes/java/lang/reflect/WeakCache.java
|
|
||||||
+++ openjdk/jdk/src/share/classes/java/lang/reflect/WeakCache.java
|
|
||||||
@@ -239,11 +239,11 @@
|
|
||||||
// wrap value with CacheValue (WeakReference)
|
|
||||||
CacheValue<V> cacheValue = new CacheValue<>(value);
|
|
||||||
|
|
||||||
+ // put into reverseMap
|
|
||||||
+ reverseMap.put(cacheValue, Boolean.TRUE);
|
|
||||||
+
|
|
||||||
// try replacing us with CacheValue (this should always succeed)
|
|
||||||
- if (valuesMap.replace(subKey, this, cacheValue)) {
|
|
||||||
- // put also in reverseMap
|
|
||||||
- reverseMap.put(cacheValue, Boolean.TRUE);
|
|
||||||
- } else {
|
|
||||||
+ if (!valuesMap.replace(subKey, this, cacheValue)) {
|
|
||||||
throw new AssertionError("Should not reach here");
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/test/java/lang/reflect/Proxy/ProxyRace.java b/test/java/lang/reflect/Proxy/ProxyRace.java
|
|
||||||
new file mode 100644
|
|
||||||
--- /dev/null
|
|
||||||
+++ openjdk/jdk/test/java/lang/reflect/Proxy/ProxyRace.java
|
|
||||||
@@ -0,0 +1,88 @@
|
|
||||||
+/*
|
|
||||||
+ * Copyright (c) 2017, 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.
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+import java.lang.reflect.Proxy;
|
|
||||||
+import java.util.concurrent.ExecutorService;
|
|
||||||
+import java.util.concurrent.Executors;
|
|
||||||
+import java.util.concurrent.Phaser;
|
|
||||||
+import java.util.concurrent.TimeUnit;
|
|
||||||
+import java.util.concurrent.atomic.AtomicInteger;
|
|
||||||
+
|
|
||||||
+/**
|
|
||||||
+ * @test
|
|
||||||
+ * @bug 8174729
|
|
||||||
+ * @summary Proxy.getProxyClass() / Proxy.isProxyClass() race detector
|
|
||||||
+ * @run main ProxyRace
|
|
||||||
+ * @author plevart
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+public class ProxyRace {
|
|
||||||
+
|
|
||||||
+ static final int threads = 8;
|
|
||||||
+
|
|
||||||
+ static volatile ClassLoader classLoader;
|
|
||||||
+ static volatile boolean terminate;
|
|
||||||
+ static final AtomicInteger racesDetected = new AtomicInteger();
|
|
||||||
+
|
|
||||||
+ public static void main(String[] args) throws Exception {
|
|
||||||
+
|
|
||||||
+ Phaser phaser = new Phaser(threads) {
|
|
||||||
+ @Override
|
|
||||||
+ protected boolean onAdvance(int phase, int registeredParties) {
|
|
||||||
+ // install new ClassLoader on each advance
|
|
||||||
+ classLoader = new CL();
|
|
||||||
+ return terminate;
|
|
||||||
+ }
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ ExecutorService exe = Executors.newFixedThreadPool(threads);
|
|
||||||
+
|
|
||||||
+ for (int i = 0; i < threads; i++) {
|
|
||||||
+ exe.execute(() -> {
|
|
||||||
+ while (phaser.arriveAndAwaitAdvance() >= 0) {
|
|
||||||
+ Class<?> proxyClass = Proxy.getProxyClass(classLoader, Runnable.class);
|
|
||||||
+ if (!Proxy.isProxyClass(proxyClass)) {
|
|
||||||
+ racesDetected.incrementAndGet();
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ });
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ Thread.sleep(5000L);
|
|
||||||
+
|
|
||||||
+ terminate = true;
|
|
||||||
+ exe.shutdown();
|
|
||||||
+ exe.awaitTermination(5L, TimeUnit.SECONDS);
|
|
||||||
+
|
|
||||||
+ System.out.println(racesDetected.get() + " races detected");
|
|
||||||
+ if (racesDetected.get() != 0) {
|
|
||||||
+ throw new RuntimeException(racesDetected.get() + " races detected");
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ static class CL extends ClassLoader {
|
|
||||||
+ public CL() {
|
|
||||||
+ super(ClassLoader.getSystemClassLoader());
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+}
|
|
@ -1,100 +0,0 @@
|
|||||||
# HG changeset patch
|
|
||||||
# User roland
|
|
||||||
# Date 1487286884 28800
|
|
||||||
# Thu Feb 16 15:14:44 2017 -0800
|
|
||||||
# Node ID 1b4eb44fbfcd0fceb485d89d91eb893d99f5864b
|
|
||||||
# Parent a9cbaff50d3d7e3a1d2dbdc0121c470142b87270
|
|
||||||
8175097, PR3334, RH1417266: [TESTBUG] 8174164 fix missed the test
|
|
||||||
Reviewed-by: kvn
|
|
||||||
|
|
||||||
diff --git a/test/compiler/c2/TestReplacedNodesOSR.java b/test/compiler/c2/TestReplacedNodesOSR.java
|
|
||||||
new file mode 100644
|
|
||||||
--- /dev/null
|
|
||||||
+++ openjdk/hotspot/test/compiler/c2/TestReplacedNodesOSR.java
|
|
||||||
@@ -0,0 +1,86 @@
|
|
||||||
+/*
|
|
||||||
+ * Copyright (c) 2017, Red Hat, Inc. 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 8174164
|
|
||||||
+ * @summary SafePointNode::_replaced_nodes breaks with irreducible loops
|
|
||||||
+ * @run main/othervm -XX:-BackgroundCompilation TestReplacedNodesOSR
|
|
||||||
+ *
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+public class TestReplacedNodesOSR {
|
|
||||||
+
|
|
||||||
+ static Object dummy;
|
|
||||||
+
|
|
||||||
+ static interface I {
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ static class A implements I {
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ static final class MyException extends Exception {
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ static final A obj = new A();
|
|
||||||
+ static I static_field() { return obj; }
|
|
||||||
+
|
|
||||||
+ // When OSR compiled, this method has an irreducible loop
|
|
||||||
+ static void test(int v, MyException e) {
|
|
||||||
+ int i = 0;
|
|
||||||
+ for (;;) {
|
|
||||||
+ if (i == 1000) {
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ try {
|
|
||||||
+ if ((i%2) == 0) {
|
|
||||||
+ int j = 0;
|
|
||||||
+ for (;;) {
|
|
||||||
+ j++;
|
|
||||||
+ if (i+j != v) {
|
|
||||||
+ if (j == 1000) {
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ } else {
|
|
||||||
+ A a = (A)static_field();
|
|
||||||
+ // replaced node recorded here
|
|
||||||
+ throw e;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ } catch(MyException ex) {
|
|
||||||
+ }
|
|
||||||
+ i++;
|
|
||||||
+ // replaced node applied on return of the method
|
|
||||||
+ // replaced node used here
|
|
||||||
+ dummy = static_field();
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ static public void main(String[] args) {
|
|
||||||
+ for (int i = 0; i < 1000; i++) {
|
|
||||||
+ test(1100, new MyException());
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+}
|
|
168
8175887-pr3415.patch
Normal file
168
8175887-pr3415.patch
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
# HG changeset patch
|
||||||
|
# User shade
|
||||||
|
# Date 1488979372 -3600
|
||||||
|
# Wed Mar 08 14:22:52 2017 +0100
|
||||||
|
# Node ID 654b7fcb4932d48063f5f1fba0c8994db5e02976
|
||||||
|
# Parent 1faf7c17089922f6f72b580253725f2ecb6ba2f8
|
||||||
|
8175887, PR3415: C1 value numbering handling of Unsafe.get*Volatile is incorrect
|
||||||
|
Reviewed-by: vlivanov
|
||||||
|
|
||||||
|
diff --git a/src/share/vm/c1/c1_ValueMap.hpp b/src/share/vm/c1/c1_ValueMap.hpp
|
||||||
|
--- openjdk/hotspot/src/share/vm/c1/c1_ValueMap.hpp
|
||||||
|
+++ openjdk/hotspot/src/share/vm/c1/c1_ValueMap.hpp
|
||||||
|
@@ -158,6 +158,12 @@
|
||||||
|
void do_UnsafePutRaw (UnsafePutRaw* x) { kill_memory(); }
|
||||||
|
void do_UnsafePutObject(UnsafePutObject* x) { kill_memory(); }
|
||||||
|
void do_UnsafeGetAndSetObject(UnsafeGetAndSetObject* x) { kill_memory(); }
|
||||||
|
+ void do_UnsafeGetRaw (UnsafeGetRaw* x) { /* nothing to do */ }
|
||||||
|
+ void do_UnsafeGetObject(UnsafeGetObject* x) {
|
||||||
|
+ if (x->is_volatile()) { // the JMM requires this
|
||||||
|
+ kill_memory();
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
void do_Intrinsic (Intrinsic* x) { if (!x->preserves_state()) kill_memory(); }
|
||||||
|
|
||||||
|
void do_Phi (Phi* x) { /* nothing to do */ }
|
||||||
|
@@ -198,8 +204,6 @@
|
||||||
|
void do_OsrEntry (OsrEntry* x) { /* nothing to do */ }
|
||||||
|
void do_ExceptionObject(ExceptionObject* x) { /* nothing to do */ }
|
||||||
|
void do_RoundFP (RoundFP* x) { /* nothing to do */ }
|
||||||
|
- void do_UnsafeGetRaw (UnsafeGetRaw* x) { /* nothing to do */ }
|
||||||
|
- void do_UnsafeGetObject(UnsafeGetObject* x) { /* nothing to do */ }
|
||||||
|
void do_UnsafePrefetchRead (UnsafePrefetchRead* x) { /* nothing to do */ }
|
||||||
|
void do_UnsafePrefetchWrite(UnsafePrefetchWrite* x) { /* nothing to do */ }
|
||||||
|
void do_ProfileCall (ProfileCall* x) { /* nothing to do */ }
|
||||||
|
diff --git a/test/compiler/c1/UnsafeVolatileGuardTest.java b/test/compiler/c1/UnsafeVolatileGuardTest.java
|
||||||
|
new file mode 100644
|
||||||
|
--- /dev/null
|
||||||
|
+++ openjdk/hotspot/test/compiler/c1/UnsafeVolatileGuardTest.java
|
||||||
|
@@ -0,0 +1,72 @@
|
||||||
|
+/*
|
||||||
|
+ * Copyright (c) 2017, Red Hat Inc. 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.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+import java.lang.reflect.Field;
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * @test
|
||||||
|
+ * @bug 8175887
|
||||||
|
+ * @summary C1 value numbering handling of Unsafe.get*Volatile is incorrect
|
||||||
|
+ * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:TieredStopAtLevel=1 UnsafeVolatileGuardTest
|
||||||
|
+ */
|
||||||
|
+public class UnsafeVolatileGuardTest {
|
||||||
|
+ volatile static private int a;
|
||||||
|
+ static private int b;
|
||||||
|
+
|
||||||
|
+ static final sun.misc.Unsafe UNSAFE;
|
||||||
|
+
|
||||||
|
+ static final Object BASE;
|
||||||
|
+ static final long OFFSET;
|
||||||
|
+
|
||||||
|
+ static {
|
||||||
|
+ try {
|
||||||
|
+ Field uf = sun.misc.Unsafe.class.getDeclaredField("theUnsafe");
|
||||||
|
+ uf.setAccessible(true);
|
||||||
|
+ UNSAFE = (sun.misc.Unsafe)uf.get(null);
|
||||||
|
+
|
||||||
|
+ Field f = UnsafeVolatileGuardTest.class.getDeclaredField("a");
|
||||||
|
+ BASE = UNSAFE.staticFieldBase(f);
|
||||||
|
+ OFFSET = UNSAFE.staticFieldOffset(f);
|
||||||
|
+ } catch (Exception e) {
|
||||||
|
+ throw new RuntimeException(e);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ static void test() {
|
||||||
|
+ int tt = b; // makes the JVM CSE the value of b
|
||||||
|
+
|
||||||
|
+ while (UNSAFE.getIntVolatile(BASE, OFFSET) == 0) {} // burn
|
||||||
|
+ if (b == 0) {
|
||||||
|
+ System.err.println("wrong value of b");
|
||||||
|
+ System.exit(1); // fail hard to report the error
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static void main(String [] args) throws Exception {
|
||||||
|
+ for (int i = 0; i < 10; i++) {
|
||||||
|
+ new Thread(UnsafeVolatileGuardTest::test).start();
|
||||||
|
+ }
|
||||||
|
+ b = 1;
|
||||||
|
+ a = 1;
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
diff --git a/test/compiler/c1/VolatileGuardTest.java b/test/compiler/c1/VolatileGuardTest.java
|
||||||
|
new file mode 100644
|
||||||
|
--- /dev/null
|
||||||
|
+++ openjdk/hotspot/test/compiler/c1/VolatileGuardTest.java
|
||||||
|
@@ -0,0 +1,52 @@
|
||||||
|
+/*
|
||||||
|
+ * Copyright (c) 2017, Red Hat Inc. 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 8175887
|
||||||
|
+ * @summary C1 doesn't respect the JMM with volatile field loads
|
||||||
|
+ *
|
||||||
|
+ * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:TieredStopAtLevel=1 VolatileGuardTest
|
||||||
|
+ */
|
||||||
|
+public class VolatileGuardTest {
|
||||||
|
+ volatile static private int a;
|
||||||
|
+ static private int b;
|
||||||
|
+
|
||||||
|
+ static void test() {
|
||||||
|
+ int tt = b; // makes the JVM CSE the value of b
|
||||||
|
+
|
||||||
|
+ while (a == 0) {} // burn
|
||||||
|
+ if (b == 0) {
|
||||||
|
+ System.err.println("wrong value of b");
|
||||||
|
+ System.exit(1); // fail hard to report the error
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public static void main(String [] args) throws Exception {
|
||||||
|
+ for (int i = 0; i < 10; i++) {
|
||||||
|
+ new Thread(VolatileGuardTest::test).start();
|
||||||
|
+ }
|
||||||
|
+ b = 1;
|
||||||
|
+ a = 1;
|
||||||
|
+ }
|
||||||
|
+}
|
135
8179084-pr3409-rh1455694.patch
Normal file
135
8179084-pr3409-rh1455694.patch
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
# HG changeset patch
|
||||||
|
# User dholmes
|
||||||
|
# Date 1493428477 14400
|
||||||
|
# Fri Apr 28 21:14:37 2017 -0400
|
||||||
|
# Node ID 2fee74c5547889d9698a2636e0a5170f9e66fb9c
|
||||||
|
# Parent 13a04e8df5a3af73794146b930b32556c7cbc5b0
|
||||||
|
8179084, PR3409, RH1455694: HotSpot VM fails to start when AggressiveHeap is set
|
||||||
|
Reviewed-by: kbarrett, stefank
|
||||||
|
|
||||||
|
diff --git a/src/share/vm/runtime/arguments.cpp b/src/share/vm/runtime/arguments.cpp
|
||||||
|
--- openjdk/hotspot/src/share/vm/runtime/arguments.cpp
|
||||||
|
+++ openjdk/hotspot/src/share/vm/runtime/arguments.cpp
|
||||||
|
@@ -3193,8 +3193,6 @@
|
||||||
|
|
||||||
|
// Enable parallel GC and adaptive generation sizing
|
||||||
|
FLAG_SET_CMDLINE(bool, UseParallelGC, true);
|
||||||
|
- FLAG_SET_DEFAULT(ParallelGCThreads,
|
||||||
|
- Abstract_VM_Version::parallel_worker_threads());
|
||||||
|
|
||||||
|
// Encourage steady state memory management
|
||||||
|
FLAG_SET_CMDLINE(uintx, ThresholdTolerance, 100);
|
||||||
|
diff --git a/test/TEST.groups b/test/TEST.groups
|
||||||
|
--- openjdk/hotspot/test/TEST.groups
|
||||||
|
+++ openjdk/hotspot/test/TEST.groups
|
||||||
|
@@ -1,5 +1,5 @@
|
||||||
|
#
|
||||||
|
-# Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
+# Copyright (c) 2013, 2017, 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
|
||||||
|
@@ -164,6 +164,7 @@
|
||||||
|
gc/TestGCLogRotationViaJcmd.java \
|
||||||
|
gc/g1/TestHumongousAllocInitialMark.java \
|
||||||
|
gc/g1/TestHumongousShrinkHeap.java \
|
||||||
|
+ gc/arguments/TestAggressiveHeap.java \
|
||||||
|
gc/arguments/TestG1HeapRegionSize.java \
|
||||||
|
gc/metaspace/TestMetaspaceMemoryPool.java \
|
||||||
|
gc/arguments/TestDynMinHeapFreeRatio.java \
|
||||||
|
diff --git a/test/gc/arguments/TestAggressiveHeap.java b/test/gc/arguments/TestAggressiveHeap.java
|
||||||
|
new file mode 100644
|
||||||
|
--- /dev/null
|
||||||
|
+++ openjdk/hotspot/test/gc/arguments/TestAggressiveHeap.java
|
||||||
|
@@ -0,0 +1,91 @@
|
||||||
|
+/*
|
||||||
|
+ * Copyright (c) 2017, 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 TestAggressiveHeap
|
||||||
|
+ * @key gc
|
||||||
|
+ * @bug 8179084
|
||||||
|
+ * @summary Test argument processing for -XX:+AggressiveHeap.
|
||||||
|
+ * @library /testlibrary
|
||||||
|
+ * @run driver TestAggressiveHeap
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+import java.lang.management.ManagementFactory;
|
||||||
|
+import javax.management.MBeanServer;
|
||||||
|
+import javax.management.ObjectName;
|
||||||
|
+
|
||||||
|
+import com.oracle.java.testlibrary.OutputAnalyzer;
|
||||||
|
+import com.oracle.java.testlibrary.ProcessTools;
|
||||||
|
+
|
||||||
|
+public class TestAggressiveHeap {
|
||||||
|
+
|
||||||
|
+ public static void main(String args[]) throws Exception {
|
||||||
|
+ if (canUseAggressiveHeapOption()) {
|
||||||
|
+ testFlag();
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ // Note: Not a normal boolean flag; -XX:-AggressiveHeap is invalid.
|
||||||
|
+ private static final String option = "-XX:+AggressiveHeap";
|
||||||
|
+
|
||||||
|
+ // Option requires at least 256M, else error during option processing.
|
||||||
|
+ private static final long minMemory = 256 * 1024 * 1024;
|
||||||
|
+
|
||||||
|
+ // bool UseParallelGC := true {product}
|
||||||
|
+ private static final String parallelGCPattern =
|
||||||
|
+ " *bool +UseParallelGC *:= *true +\\{product\\}";
|
||||||
|
+
|
||||||
|
+ private static void testFlag() throws Exception {
|
||||||
|
+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
|
||||||
|
+ option, "-XX:+PrintFlagsFinal", "-version");
|
||||||
|
+
|
||||||
|
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||||
|
+
|
||||||
|
+ output.shouldHaveExitValue(0);
|
||||||
|
+
|
||||||
|
+ String value = output.firstMatch(parallelGCPattern);
|
||||||
|
+ if (value == null) {
|
||||||
|
+ throw new RuntimeException(
|
||||||
|
+ option + " didn't set UseParallelGC");
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ private static boolean haveRequiredMemory() throws Exception {
|
||||||
|
+ MBeanServer server = ManagementFactory.getPlatformMBeanServer();
|
||||||
|
+ ObjectName os = new ObjectName("java.lang", "type", "OperatingSystem");
|
||||||
|
+ Object attr = server.getAttribute(os, "TotalPhysicalMemorySize");
|
||||||
|
+ String value = attr.toString();
|
||||||
|
+ long memory = Long.parseLong(value);
|
||||||
|
+ return memory >= minMemory;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ private static boolean canUseAggressiveHeapOption() throws Exception {
|
||||||
|
+ if (!haveRequiredMemory()) {
|
||||||
|
+ System.out.println(
|
||||||
|
+ "Skipping test of " + option + " : insufficient memory");
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
+ return true;
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
92
8181419-pr3413-rh1463144.patch
Normal file
92
8181419-pr3413-rh1463144.patch
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
# HG changeset patch
|
||||||
|
# User stuefe
|
||||||
|
# Date 1497865921 -7200
|
||||||
|
# Mon Jun 19 11:52:01 2017 +0200
|
||||||
|
# Node ID ca0c7b2783e0102468218589a062e7ac4736aae2
|
||||||
|
# Parent 148a7d6c463ad1726bad8a9e8d5df191314d704b
|
||||||
|
8181419, PR3413, RH1463144: Race in jdwp invoker handling may lead to crashes or invalid results
|
||||||
|
Reviewed-by: sspitsyn, sgehwolf, clanger
|
||||||
|
|
||||||
|
diff --git a/src/share/back/invoker.c b/src/share/back/invoker.c
|
||||||
|
--- openjdk/jdk/src/share/back/invoker.c
|
||||||
|
+++ openjdk/jdk/src/share/back/invoker.c
|
||||||
|
@@ -212,30 +212,6 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
- * Delete saved global references - if any - for:
|
||||||
|
- * - a potentially thrown Exception
|
||||||
|
- * - a returned refernce/array value
|
||||||
|
- * See invoker_doInvoke() and invoke* methods where global references
|
||||||
|
- * are being saved.
|
||||||
|
- */
|
||||||
|
-static void
|
||||||
|
-deletePotentiallySavedGlobalRefs(JNIEnv *env, InvokeRequest *request)
|
||||||
|
-{
|
||||||
|
- /* Delete potentially saved return value */
|
||||||
|
- if ((request->invokeType == INVOKE_CONSTRUCTOR) ||
|
||||||
|
- (returnTypeTag(request->methodSignature) == JDWP_TAG(OBJECT)) ||
|
||||||
|
- (returnTypeTag(request->methodSignature) == JDWP_TAG(ARRAY))) {
|
||||||
|
- if (request->returnValue.l != NULL) {
|
||||||
|
- tossGlobalRef(env, &(request->returnValue.l));
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
- /* Delete potentially saved exception */
|
||||||
|
- if (request->exception != NULL) {
|
||||||
|
- tossGlobalRef(env, &(request->exception));
|
||||||
|
- }
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-/*
|
||||||
|
* Delete global argument references from the request which got put there before a
|
||||||
|
* invoke request was carried out. See fillInvokeRequest().
|
||||||
|
*/
|
||||||
|
@@ -744,6 +720,7 @@
|
||||||
|
jint id;
|
||||||
|
InvokeRequest *request;
|
||||||
|
jboolean detached;
|
||||||
|
+ jboolean mustReleaseReturnValue = JNI_FALSE;
|
||||||
|
|
||||||
|
JDI_ASSERT(thread);
|
||||||
|
|
||||||
|
@@ -787,6 +764,13 @@
|
||||||
|
id = request->id;
|
||||||
|
exc = request->exception;
|
||||||
|
returnValue = request->returnValue;
|
||||||
|
+
|
||||||
|
+ /* Release return value and exception references, but delay the release
|
||||||
|
+ * until after the return packet was sent. */
|
||||||
|
+ mustReleaseReturnValue = request->invokeType == INVOKE_CONSTRUCTOR ||
|
||||||
|
+ returnTypeTag(request->methodSignature) == JDWP_TAG(OBJECT) ||
|
||||||
|
+ returnTypeTag(request->methodSignature) == JDWP_TAG(ARRAY);
|
||||||
|
+
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
@@ -801,6 +785,12 @@
|
||||||
|
*/
|
||||||
|
deleteGlobalArgumentRefs(env, request);
|
||||||
|
|
||||||
|
+ /* From now on, do not access the request structure anymore
|
||||||
|
+ * for this request id, because once we give up the invokerLock it may
|
||||||
|
+ * be immediately reused by a new invoke request.
|
||||||
|
+ */
|
||||||
|
+ request = NULL;
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* Give up the lock before I/O operation
|
||||||
|
*/
|
||||||
|
@@ -821,7 +811,12 @@
|
||||||
|
*/
|
||||||
|
eventHandler_lock(); // for proper lock order
|
||||||
|
debugMonitorEnter(invokerLock);
|
||||||
|
- deletePotentiallySavedGlobalRefs(env, request);
|
||||||
|
+ if (mustReleaseReturnValue && returnValue.l != NULL) {
|
||||||
|
+ tossGlobalRef(env, &returnValue.l);
|
||||||
|
+ }
|
||||||
|
+ if (exc != NULL) {
|
||||||
|
+ tossGlobalRef(env, &exc);
|
||||||
|
+ }
|
||||||
|
debugMonitorExit(invokerLock);
|
||||||
|
eventHandler_unlock();
|
||||||
|
}
|
@ -1,10 +1,10 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
ZIP_SRC=jdk8/jdk/src/share/native/java/util/zip/zlib-*
|
ZIP_SRC=openjdk/jdk/src/share/native/java/util/zip/zlib-*
|
||||||
JPEG_SRC=jdk8/jdk/src/share/native/sun/awt/image/jpeg
|
JPEG_SRC=openjdk/jdk/src/share/native/sun/awt/image/jpeg
|
||||||
GIF_SRC=jdk8/jdk/src/share/native/sun/awt/giflib
|
GIF_SRC=openjdk/jdk/src/share/native/sun/awt/giflib
|
||||||
PNG_SRC=jdk8/jdk/src/share/native/sun/awt/libpng
|
PNG_SRC=openjdk/jdk/src/share/native/sun/awt/libpng
|
||||||
LCMS_SRC=jdk8/jdk/src/share/native/sun/java2d/cmm/lcms
|
LCMS_SRC=openjdk/jdk/src/share/native/sun/java2d/cmm/lcms
|
||||||
|
|
||||||
echo "Removing built-in libs (they will be linked)"
|
echo "Removing built-in libs (they will be linked)"
|
||||||
|
|
||||||
|
@ -204,7 +204,7 @@
|
|||||||
# note, following three variables are sedded from update_sources if used correctly. Hardcode them rather there.
|
# note, following three variables are sedded from update_sources if used correctly. Hardcode them rather there.
|
||||||
%global project aarch64-port
|
%global project aarch64-port
|
||||||
%global repo jdk8u
|
%global repo jdk8u
|
||||||
%global revision aarch64-jdk8u131-b12
|
%global revision aarch64-jdk8u141-b16
|
||||||
# eg # jdk8u60-b27 -> jdk8u60 or # aarch64-jdk8u60-b27 -> aarch64-jdk8u60 (dont forget spec escape % by %%)
|
# eg # jdk8u60-b27 -> jdk8u60 or # aarch64-jdk8u60-b27 -> aarch64-jdk8u60 (dont forget spec escape % by %%)
|
||||||
%global whole_update %(VERSION=%{revision}; echo ${VERSION%%-*})
|
%global whole_update %(VERSION=%{revision}; echo ${VERSION%%-*})
|
||||||
# eg jdk8u60 -> 60 or aarch64-jdk8u60 -> 60
|
# eg jdk8u60 -> 60 or aarch64-jdk8u60 -> 60
|
||||||
@ -814,7 +814,7 @@ Obsoletes: java-1.7.0-openjdk-accessibility%1
|
|||||||
|
|
||||||
Name: java-%{javaver}-%{origin}
|
Name: java-%{javaver}-%{origin}
|
||||||
Version: %{javaver}.%{updatever}
|
Version: %{javaver}.%{updatever}
|
||||||
Release: 7.%{buildver}%{?dist}
|
Release: 1.%{buildver}%{?dist}
|
||||||
# java-1.5.0-ibm from jpackage.org set Epoch to 1 for unknown reasons,
|
# java-1.5.0-ibm from jpackage.org set Epoch to 1 for unknown reasons,
|
||||||
# and this change was brought into RHEL-4. java-1.5.0-ibm packages
|
# and this change was brought into RHEL-4. java-1.5.0-ibm packages
|
||||||
# also included the epoch in their virtual provides. This created a
|
# also included the epoch in their virtual provides. This created a
|
||||||
@ -840,7 +840,7 @@ URL: http://openjdk.java.net/
|
|||||||
Source0: %{project}-%{repo}-%{revision}.tar.xz
|
Source0: %{project}-%{repo}-%{revision}.tar.xz
|
||||||
|
|
||||||
# Shenandoah HotSpot
|
# Shenandoah HotSpot
|
||||||
Source1: aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u131-b12-shenandoah-merge-2017-04-20.tar.xz
|
Source1: aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u141-b16.tar.xz
|
||||||
|
|
||||||
# Custom README for -src subpackage
|
# Custom README for -src subpackage
|
||||||
Source2: README.src
|
Source2: README.src
|
||||||
@ -947,34 +947,24 @@ Patch400: 8154313.patch
|
|||||||
Patch526: 6260348-pr3066.patch
|
Patch526: 6260348-pr3066.patch
|
||||||
# 8061305, PR3335, RH1423421: Javadoc crashes when method name ends with "Property"
|
# 8061305, PR3335, RH1423421: Javadoc crashes when method name ends with "Property"
|
||||||
Patch538: 8061305-pr3335-rh1423421.patch
|
Patch538: 8061305-pr3335-rh1423421.patch
|
||||||
# 8175813, PR3394, RH1448880: PPC64: "mbind: Invalid argument" when -XX:+UseNUMA is used
|
|
||||||
Patch550: 8175813-pr3394-rh1448880.patch
|
|
||||||
# 8181055, PR3394, RH1448880: PPC64: "mbind: Invalid argument" still seen after 8175813
|
# 8181055, PR3394, RH1448880: PPC64: "mbind: Invalid argument" still seen after 8175813
|
||||||
Patch551: 8181055-pr3394-rh1448880.patch
|
Patch551: 8181055-pr3394-rh1448880.patch
|
||||||
|
# 8181419, PR3413, RH1463144: Race in jdwp invoker handling may lead to crashes or invalid results
|
||||||
# Patches upstream and appearing in 8u131
|
Patch553: 8181419-pr3413-rh1463144.patch
|
||||||
# 6515172, PR3346: Runtime.availableProcessors() ignores Linux taskset command
|
|
||||||
Patch542: 6515172-pr3346.patch
|
|
||||||
|
|
||||||
# Patches upstream and appearing in 8u152
|
# Patches upstream and appearing in 8u152
|
||||||
# 8153711, PR3313, RH1284948: [REDO] JDWP: Memory Leak: GlobalRefs never deleted when processing invokeMethod command
|
# 8153711, PR3313, RH1284948: [REDO] JDWP: Memory Leak: GlobalRefs never deleted when processing invokeMethod command
|
||||||
Patch535: 8153711-pr3313-rh1284948.patch
|
Patch535: 8153711-pr3313-rh1284948.patch
|
||||||
# 8144566, PR3352: Custom HostnameVerifier disables SNI extension
|
|
||||||
Patch544: 8144566-pr3352.patch
|
|
||||||
# 8155049, PR3352: New tests from 8144566 fail with "No expected Server Name Indication"
|
|
||||||
Patch545: 8155049-pr3352.patch
|
|
||||||
# 8162384, PR3122, RH1358661: Performance regression: bimorphic inlining may be bypassed by type speculation
|
# 8162384, PR3122, RH1358661: Performance regression: bimorphic inlining may be bypassed by type speculation
|
||||||
Patch532: 8162384-pr3122-rh1358661.patch
|
Patch532: 8162384-pr3122-rh1358661.patch
|
||||||
# 8165231, RH1437545: java.nio.Bits.unaligned() doesn't return true on ppc
|
|
||||||
Patch546: 8165231-rh1437545.patch
|
|
||||||
# 8173941, PR3326: SA does not work if executable is DSO
|
# 8173941, PR3326: SA does not work if executable is DSO
|
||||||
Patch547: 8173941-pr3326.patch
|
Patch547: 8173941-pr3326.patch
|
||||||
# 8174164, PR3334, RH1417266: SafePointNode::_replaced_nodes breaks with irreducible loops"
|
# 8175813, PR3394, RH1448880: PPC64: "mbind: Invalid argument" when -XX:+UseNUMA is used
|
||||||
Patch537: 8174164-pr3334-rh1417266.patch
|
Patch550: 8175813-pr3394-rh1448880.patch
|
||||||
# 8174729, PR3336, RH1420518: Race Condition in java.lang.reflect.WeakCache
|
# 8179084, PR3409, RH1455694: HotSpot VM fails to start when AggressiveHeap is set
|
||||||
Patch548: 8174729-pr3336-rh1420518.patch
|
Patch552: 8179084-pr3409-rh1455694.patch
|
||||||
# 8175097, PR3334, RH1417266: [TESTBUG] 8174164 fix missed the test
|
# 8175887, PR3415: C1 value numbering handling of Unsafe.get*Volatile is incorrect
|
||||||
Patch549: 8175097-pr3334-rh1417266.patch
|
Patch554: 8175887-pr3415.patch
|
||||||
|
|
||||||
# Patches ineligible for 8u
|
# Patches ineligible for 8u
|
||||||
# 8043805: Allow using a system-installed libjpeg
|
# 8043805: Allow using a system-installed libjpeg
|
||||||
@ -1370,17 +1360,13 @@ sh %{SOURCE12}
|
|||||||
%patch528
|
%patch528
|
||||||
%patch532
|
%patch532
|
||||||
%patch535
|
%patch535
|
||||||
%patch537
|
|
||||||
%patch538
|
%patch538
|
||||||
%patch542
|
|
||||||
%patch544
|
|
||||||
%patch545
|
|
||||||
%patch546
|
|
||||||
%patch547
|
%patch547
|
||||||
%patch548
|
|
||||||
%patch549
|
|
||||||
%patch550
|
%patch550
|
||||||
%patch551
|
%patch551
|
||||||
|
%patch552
|
||||||
|
%patch553
|
||||||
|
%patch554
|
||||||
|
|
||||||
# RPM-only fixes
|
# RPM-only fixes
|
||||||
%patch525
|
%patch525
|
||||||
@ -2081,6 +2067,10 @@ require "copy_jdk_configs.lua"
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Jul 21 2017 Jiri Vanek <jvanek@redhat.com> - 1:1.8.0.141-1.b16
|
||||||
|
- updated to security u141.b16
|
||||||
|
- sync patches with rhel7
|
||||||
|
|
||||||
* Sat Jun 17 2017 Jiri Vanek <jvanek@redhat.com> - 1:1.8.0.131-7.b12
|
* Sat Jun 17 2017 Jiri Vanek <jvanek@redhat.com> - 1:1.8.0.131-7.b12
|
||||||
- adapted to no longer noarch openjfx-devel
|
- adapted to no longer noarch openjfx-devel
|
||||||
|
|
||||||
|
@ -6,10 +6,11 @@
|
|||||||
# Parent afd392dfaed501ac674a7cc3e37353ce300969c7
|
# Parent afd392dfaed501ac674a7cc3e37353ce300969c7
|
||||||
PR1983: Support using the system installation of NSS with the SunEC provider
|
PR1983: Support using the system installation of NSS with the SunEC provider
|
||||||
Summary: Apply code changes from PR1699 & PR1742 & forward-port Makefile changes to the new build.
|
Summary: Apply code changes from PR1699 & PR1742 & forward-port Makefile changes to the new build.
|
||||||
|
Updated 2017/07/04 to accomodate 8175110
|
||||||
|
|
||||||
diff -r afd392dfaed5 -r 48c15869ecd5 make/lib/SecurityLibraries.gmk
|
diff -r 984a4af2ed4e make/lib/SecurityLibraries.gmk
|
||||||
--- openjdk/jdk/make/lib/SecurityLibraries.gmk Tue Jan 26 22:26:26 2016 +0000
|
--- openjdk/jdk/make/lib/SecurityLibraries.gmk
|
||||||
+++ openjdk/jdk/make/lib/SecurityLibraries.gmk Wed Jan 27 02:54:06 2016 +0000
|
+++ openjdk/jdk/make/lib/SecurityLibraries.gmk
|
||||||
@@ -218,8 +218,17 @@
|
@@ -218,8 +218,17 @@
|
||||||
|
|
||||||
ifeq ($(ENABLE_INTREE_EC), yes)
|
ifeq ($(ENABLE_INTREE_EC), yes)
|
||||||
@ -51,9 +52,9 @@ diff -r afd392dfaed5 -r 48c15869ecd5 make/lib/SecurityLibraries.gmk
|
|||||||
VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \
|
VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \
|
||||||
RC_FLAGS := $(RC_FLAGS) \
|
RC_FLAGS := $(RC_FLAGS) \
|
||||||
-D "JDK_FNAME=sunec.dll" \
|
-D "JDK_FNAME=sunec.dll" \
|
||||||
diff -r afd392dfaed5 -r 48c15869ecd5 src/share/native/sun/security/ec/ECC_JNI.cpp
|
diff -r 984a4af2ed4e src/share/native/sun/security/ec/ECC_JNI.cpp
|
||||||
--- openjdk/jdk/src/share/native/sun/security/ec/ECC_JNI.cpp Tue Jan 26 22:26:26 2016 +0000
|
--- openjdk/jdk/src/share/native/sun/security/ec/ECC_JNI.cpp
|
||||||
+++ openjdk/jdk/src/share/native/sun/security/ec/ECC_JNI.cpp Wed Jan 27 02:54:06 2016 +0000
|
+++ openjdk/jdk/src/share/native/sun/security/ec/ECC_JNI.cpp
|
||||||
@@ -24,7 +24,7 @@
|
@@ -24,7 +24,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -76,8 +77,8 @@ diff -r afd392dfaed5 -r 48c15869ecd5 src/share/native/sun/security/ec/ECC_JNI.cp
|
|||||||
*/
|
*/
|
||||||
JNIEXPORT jbyteArray
|
JNIEXPORT jbyteArray
|
||||||
JNICALL Java_sun_security_ec_ECDSASignature_signDigest
|
JNICALL Java_sun_security_ec_ECDSASignature_signDigest
|
||||||
- (JNIEnv *env, jclass clazz, jbyteArray digest, jbyteArray privateKey, jbyteArray encodedParams, jbyteArray seed)
|
- (JNIEnv *env, jclass clazz, jbyteArray digest, jbyteArray privateKey, jbyteArray encodedParams, jbyteArray seed, jint timing)
|
||||||
+ (JNIEnv *env, jclass UNUSED(clazz), jbyteArray digest, jbyteArray privateKey, jbyteArray encodedParams, jbyteArray seed)
|
+ (JNIEnv *env, jclass UNUSED(clazz), jbyteArray digest, jbyteArray privateKey, jbyteArray encodedParams, jbyteArray seed, jint timing)
|
||||||
{
|
{
|
||||||
jbyte* pDigestBuffer = NULL;
|
jbyte* pDigestBuffer = NULL;
|
||||||
jint jDigestLength = env->GetArrayLength(digest);
|
jint jDigestLength = env->GetArrayLength(digest);
|
||||||
@ -99,12 +100,12 @@ diff -r afd392dfaed5 -r 48c15869ecd5 src/share/native/sun/security/ec/ECC_JNI.cp
|
|||||||
{
|
{
|
||||||
jbyteArray jSecret = NULL;
|
jbyteArray jSecret = NULL;
|
||||||
ECParams *ecparams = NULL;
|
ECParams *ecparams = NULL;
|
||||||
diff -r afd392dfaed5 -r 48c15869ecd5 src/share/native/sun/security/ec/ecc_impl.h
|
diff -r 984a4af2ed4e src/share/native/sun/security/ec/ecc_impl.h
|
||||||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
--- /dev/null
|
||||||
+++ openjdk/jdk/src/share/native/sun/security/ec/ecc_impl.h Wed Jan 27 02:54:06 2016 +0000
|
+++ openjdk/jdk/src/share/native/sun/security/ec/ecc_impl.h
|
||||||
@@ -0,0 +1,298 @@
|
@@ -0,0 +1,298 @@
|
||||||
+/*
|
+/*
|
||||||
+ * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
|
+ * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||||
+ * Use is subject to license terms.
|
+ * Use is subject to license terms.
|
||||||
+ *
|
+ *
|
||||||
+ * This library is free software; you can redistribute it and/or
|
+ * This library is free software; you can redistribute it and/or
|
||||||
@ -139,7 +140,7 @@ diff -r afd392dfaed5 -r 48c15869ecd5 src/share/native/sun/security/ec/ecc_impl.h
|
|||||||
+ * Dr Vipul Gupta <vipul.gupta@sun.com> and
|
+ * Dr Vipul Gupta <vipul.gupta@sun.com> and
|
||||||
+ * Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories
|
+ * Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories
|
||||||
+ *
|
+ *
|
||||||
+ * Last Modified Date from the Original Code: November 2013
|
+ * Last Modified Date from the Original Code: May 2017
|
||||||
+ *********************************************************************** */
|
+ *********************************************************************** */
|
||||||
+
|
+
|
||||||
+#ifndef _ECC_IMPL_H
|
+#ifndef _ECC_IMPL_H
|
||||||
@ -373,7 +374,7 @@ diff -r afd392dfaed5 -r 48c15869ecd5 src/share/native/sun/security/ec/ecc_impl.h
|
|||||||
+#ifdef SYSTEM_NSS
|
+#ifdef SYSTEM_NSS
|
||||||
+#define EC_DecodeParams(a,b,c) EC_DecodeParams(a,b)
|
+#define EC_DecodeParams(a,b,c) EC_DecodeParams(a,b)
|
||||||
+#define EC_NewKey(a,b,c,d,e) EC_NewKeyFromSeed(a,b,c,d)
|
+#define EC_NewKey(a,b,c,d,e) EC_NewKeyFromSeed(a,b,c,d)
|
||||||
+#define ECDSA_SignDigest(a,b,c,d,e,f) ECDSA_SignDigestWithSeed(a,b,c,d,e)
|
+#define ECDSA_SignDigest(a,b,c,d,e,f,g) ECDSA_SignDigestWithSeed(a,b,c,d,e)
|
||||||
+#define ECDSA_VerifyDigest(a,b,c,d) ECDSA_VerifyDigest(a,b,c)
|
+#define ECDSA_VerifyDigest(a,b,c,d) ECDSA_VerifyDigest(a,b,c)
|
||||||
+#define ECDH_Derive(a,b,c,d,e,f) ECDH_Derive(a,b,c,d,e)
|
+#define ECDH_Derive(a,b,c,d,e,f) ECDH_Derive(a,b,c,d,e)
|
||||||
+#else
|
+#else
|
||||||
@ -389,7 +390,7 @@ diff -r afd392dfaed5 -r 48c15869ecd5 src/share/native/sun/security/ec/ecc_impl.h
|
|||||||
+ const unsigned char* random, int randomlen, int);
|
+ const unsigned char* random, int randomlen, int);
|
||||||
+/* This function has been modified to accept an array of random bytes */
|
+/* This function has been modified to accept an array of random bytes */
|
||||||
+extern SECStatus ECDSA_SignDigest(ECPrivateKey *, SECItem *, const SECItem *,
|
+extern SECStatus ECDSA_SignDigest(ECPrivateKey *, SECItem *, const SECItem *,
|
||||||
+ const unsigned char* random, int randomlen, int);
|
+ const unsigned char* random, int randomlen, int, int timing);
|
||||||
+extern SECStatus ECDSA_VerifyDigest(ECPublicKey *, const SECItem *,
|
+extern SECStatus ECDSA_VerifyDigest(ECPublicKey *, const SECItem *,
|
||||||
+ const SECItem *, int);
|
+ const SECItem *, int);
|
||||||
+extern SECStatus ECDH_Derive(SECItem *, ECParams *, SECItem *, boolean_t,
|
+extern SECStatus ECDH_Derive(SECItem *, ECParams *, SECItem *, boolean_t,
|
||||||
@ -401,12 +402,12 @@ diff -r afd392dfaed5 -r 48c15869ecd5 src/share/native/sun/security/ec/ecc_impl.h
|
|||||||
+#endif
|
+#endif
|
||||||
+
|
+
|
||||||
+#endif /* _ECC_IMPL_H */
|
+#endif /* _ECC_IMPL_H */
|
||||||
diff -r afd392dfaed5 -r 48c15869ecd5 src/share/native/sun/security/ec/impl/ecc_impl.h
|
diff -r 984a4af2ed4e src/share/native/sun/security/ec/impl/ecc_impl.h
|
||||||
--- openjdk/jdk/src/share/native/sun/security/ec/impl/ecc_impl.h Tue Jan 26 22:26:26 2016 +0000
|
--- openjdk/jdk/src/share/native/sun/security/ec/impl/ecc_impl.h
|
||||||
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
|
+++ /dev/null
|
||||||
@@ -1,271 +0,0 @@
|
@@ -1,271 +0,0 @@
|
||||||
-/*
|
-/*
|
||||||
- * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
|
- * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||||
- * Use is subject to license terms.
|
- * Use is subject to license terms.
|
||||||
- *
|
- *
|
||||||
- * This library is free software; you can redistribute it and/or
|
- * This library is free software; you can redistribute it and/or
|
||||||
@ -441,7 +442,7 @@ diff -r afd392dfaed5 -r 48c15869ecd5 src/share/native/sun/security/ec/impl/ecc_i
|
|||||||
- * Dr Vipul Gupta <vipul.gupta@sun.com> and
|
- * Dr Vipul Gupta <vipul.gupta@sun.com> and
|
||||||
- * Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories
|
- * Douglas Stebila <douglas@stebila.ca>, Sun Microsystems Laboratories
|
||||||
- *
|
- *
|
||||||
- * Last Modified Date from the Original Code: November 2013
|
- * Last Modified Date from the Original Code: May 2017
|
||||||
- *********************************************************************** */
|
- *********************************************************************** */
|
||||||
-
|
-
|
||||||
-#ifndef _ECC_IMPL_H
|
-#ifndef _ECC_IMPL_H
|
||||||
@ -665,7 +666,7 @@ diff -r afd392dfaed5 -r 48c15869ecd5 src/share/native/sun/security/ec/impl/ecc_i
|
|||||||
- const unsigned char* random, int randomlen, int);
|
- const unsigned char* random, int randomlen, int);
|
||||||
-/* This function has been modified to accept an array of random bytes */
|
-/* This function has been modified to accept an array of random bytes */
|
||||||
-extern SECStatus ECDSA_SignDigest(ECPrivateKey *, SECItem *, const SECItem *,
|
-extern SECStatus ECDSA_SignDigest(ECPrivateKey *, SECItem *, const SECItem *,
|
||||||
- const unsigned char* random, int randomlen, int);
|
- const unsigned char* random, int randomlen, int, int timing);
|
||||||
-extern SECStatus ECDSA_VerifyDigest(ECPublicKey *, const SECItem *,
|
-extern SECStatus ECDSA_VerifyDigest(ECPublicKey *, const SECItem *,
|
||||||
- const SECItem *, int);
|
- const SECItem *, int);
|
||||||
-extern SECStatus ECDH_Derive(SECItem *, ECParams *, SECItem *, boolean_t,
|
-extern SECStatus ECDH_Derive(SECItem *, ECParams *, SECItem *, boolean_t,
|
||||||
@ -676,9 +677,9 @@ diff -r afd392dfaed5 -r 48c15869ecd5 src/share/native/sun/security/ec/impl/ecc_i
|
|||||||
-#endif
|
-#endif
|
||||||
-
|
-
|
||||||
-#endif /* _ECC_IMPL_H */
|
-#endif /* _ECC_IMPL_H */
|
||||||
diff -r afd392dfaed5 -r 48c15869ecd5 src/solaris/javavm/export/jni_md.h
|
diff -r 984a4af2ed4e src/solaris/javavm/export/jni_md.h
|
||||||
--- openjdk/jdk/src/solaris/javavm/export/jni_md.h Tue Jan 26 22:26:26 2016 +0000
|
--- openjdk/jdk/src/solaris/javavm/export/jni_md.h
|
||||||
+++ openjdk/jdk/src/solaris/javavm/export/jni_md.h Wed Jan 27 02:54:06 2016 +0000
|
+++ openjdk/jdk/src/solaris/javavm/export/jni_md.h
|
||||||
@@ -36,6 +36,11 @@
|
@@ -36,6 +36,11 @@
|
||||||
#define JNIEXPORT
|
#define JNIEXPORT
|
||||||
#define JNIIMPORT
|
#define JNIIMPORT
|
||||||
|
11
pr2899.patch
11
pr2899.patch
@ -6,18 +6,19 @@
|
|||||||
# Parent 8957aff589013e671f02d38023d5ff245ef27e87
|
# Parent 8957aff589013e671f02d38023d5ff245ef27e87
|
||||||
PR2899: Don't use WithSeed versions of NSS functions as they don't fully process the seed
|
PR2899: Don't use WithSeed versions of NSS functions as they don't fully process the seed
|
||||||
Contributed-by: Alex Kashchenko <akashche@redhat.com>
|
Contributed-by: Alex Kashchenko <akashche@redhat.com>
|
||||||
|
Updated 2017/07/04 to accomodate 8175110 by Andrew Hughes <gnu.andrew@redhat.com>
|
||||||
|
|
||||||
diff -r 8957aff58901 -r 9dc0eca5fa89 src/share/native/sun/security/ec/ecc_impl.h
|
diff -r e5fdbb82bd49 src/share/native/sun/security/ec/ecc_impl.h
|
||||||
--- openjdk/jdk/src/share/native/sun/security/ec/ecc_impl.h Wed Mar 30 04:48:56 2016 +0100
|
--- openjdk/jdk/src/share/native/sun/security/ec/ecc_impl.h
|
||||||
+++ openjdk/jdk/src/share/native/sun/security/ec/ecc_impl.h Wed Mar 30 05:54:40 2016 +0100
|
+++ openjdk/jdk/src/share/native/sun/security/ec/ecc_impl.h
|
||||||
@@ -267,8 +267,8 @@
|
@@ -267,8 +267,8 @@
|
||||||
|
|
||||||
#ifdef SYSTEM_NSS
|
#ifdef SYSTEM_NSS
|
||||||
#define EC_DecodeParams(a,b,c) EC_DecodeParams(a,b)
|
#define EC_DecodeParams(a,b,c) EC_DecodeParams(a,b)
|
||||||
-#define EC_NewKey(a,b,c,d,e) EC_NewKeyFromSeed(a,b,c,d)
|
-#define EC_NewKey(a,b,c,d,e) EC_NewKeyFromSeed(a,b,c,d)
|
||||||
-#define ECDSA_SignDigest(a,b,c,d,e,f) ECDSA_SignDigestWithSeed(a,b,c,d,e)
|
-#define ECDSA_SignDigest(a,b,c,d,e,f,g) ECDSA_SignDigestWithSeed(a,b,c,d,e)
|
||||||
+#define EC_NewKey(a,b,c,d,e) EC_NewKey(a,b)
|
+#define EC_NewKey(a,b,c,d,e) EC_NewKey(a,b)
|
||||||
+#define ECDSA_SignDigest(a,b,c,d,e,f) ECDSA_SignDigest(a,b,c)
|
+#define ECDSA_SignDigest(a,b,c,d,e,f,g) ECDSA_SignDigest(a,b,c)
|
||||||
#define ECDSA_VerifyDigest(a,b,c,d) ECDSA_VerifyDigest(a,b,c)
|
#define ECDSA_VerifyDigest(a,b,c,d) ECDSA_VerifyDigest(a,b,c)
|
||||||
#define ECDH_Derive(a,b,c,d,e,f) ECDH_Derive(a,b,c,d,e)
|
#define ECDH_Derive(a,b,c,d,e,f) ECDH_Derive(a,b,c,d,e)
|
||||||
#else
|
#else
|
||||||
|
17
pr2934.patch
17
pr2934.patch
@ -6,10 +6,11 @@
|
|||||||
# Parent 3fa42705acab6d69b6141f47ebba4f85739a338c
|
# Parent 3fa42705acab6d69b6141f47ebba4f85739a338c
|
||||||
PR2934: SunEC provider throwing KeyException with current NSS
|
PR2934: SunEC provider throwing KeyException with current NSS
|
||||||
Summary: Initialise the random number generator and feed the seed to it.
|
Summary: Initialise the random number generator and feed the seed to it.
|
||||||
|
Updated 2017/07/04 to accomodate 8175110
|
||||||
|
|
||||||
diff -r 3fa42705acab -r dab76de2f91c src/share/native/sun/security/ec/ECC_JNI.cpp
|
diff -r 8aed1e903a4c src/share/native/sun/security/ec/ECC_JNI.cpp
|
||||||
--- openjdk/jdk/src/share/native/sun/security/ec/ECC_JNI.cpp Wed Apr 20 03:39:11 2016 +0100
|
--- openjdk/jdk/src/share/native/sun/security/ec/ECC_JNI.cpp
|
||||||
+++ openjdk/jdk/src/share/native/sun/security/ec/ECC_JNI.cpp Fri Apr 22 19:17:13 2016 +0100
|
+++ openjdk/jdk/src/share/native/sun/security/ec/ECC_JNI.cpp
|
||||||
@@ -134,8 +134,17 @@
|
@@ -134,8 +134,17 @@
|
||||||
env->GetByteArrayRegion(seed, 0, jSeedLength, pSeedBuffer);
|
env->GetByteArrayRegion(seed, 0, jSeedLength, pSeedBuffer);
|
||||||
|
|
||||||
@ -42,7 +43,7 @@ diff -r 3fa42705acab -r dab76de2f91c src/share/native/sun/security/ec/ECC_JNI.cp
|
|||||||
+ != SECSuccess) {
|
+ != SECSuccess) {
|
||||||
+#else
|
+#else
|
||||||
if (ECDSA_SignDigest(&privKey, &signature_item, &digest_item,
|
if (ECDSA_SignDigest(&privKey, &signature_item, &digest_item,
|
||||||
(unsigned char *) pSeedBuffer, jSeedLength, 0) != SECSuccess) {
|
(unsigned char *) pSeedBuffer, jSeedLength, 0, timing) != SECSuccess) {
|
||||||
+#endif
|
+#endif
|
||||||
ThrowException(env, KEY_EXCEPTION);
|
ThrowException(env, KEY_EXCEPTION);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
@ -65,9 +66,9 @@ diff -r 3fa42705acab -r dab76de2f91c src/share/native/sun/security/ec/ECC_JNI.cp
|
|||||||
if (SECOID_Shutdown() != SECSuccess) {
|
if (SECOID_Shutdown() != SECSuccess) {
|
||||||
ThrowException(env, INTERNAL_ERROR);
|
ThrowException(env, INTERNAL_ERROR);
|
||||||
}
|
}
|
||||||
diff -r 3fa42705acab -r dab76de2f91c src/share/native/sun/security/ec/ecc_impl.h
|
diff -r 8aed1e903a4c src/share/native/sun/security/ec/ecc_impl.h
|
||||||
--- openjdk/jdk/src/share/native/sun/security/ec/ecc_impl.h Wed Apr 20 03:39:11 2016 +0100
|
--- openjdk/jdk/src/share/native/sun/security/ec/ecc_impl.h
|
||||||
+++ openjdk/jdk/src/share/native/sun/security/ec/ecc_impl.h Fri Apr 22 19:17:13 2016 +0100
|
+++ openjdk/jdk/src/share/native/sun/security/ec/ecc_impl.h
|
||||||
@@ -254,8 +254,10 @@
|
@@ -254,8 +254,10 @@
|
||||||
This function is no longer required because the random bytes are now
|
This function is no longer required because the random bytes are now
|
||||||
supplied by the caller. Force a failure.
|
supplied by the caller. Force a failure.
|
||||||
@ -84,7 +85,7 @@ diff -r 3fa42705acab -r dab76de2f91c src/share/native/sun/security/ec/ecc_impl.h
|
|||||||
#ifdef SYSTEM_NSS
|
#ifdef SYSTEM_NSS
|
||||||
#define EC_DecodeParams(a,b,c) EC_DecodeParams(a,b)
|
#define EC_DecodeParams(a,b,c) EC_DecodeParams(a,b)
|
||||||
-#define EC_NewKey(a,b,c,d,e) EC_NewKey(a,b)
|
-#define EC_NewKey(a,b,c,d,e) EC_NewKey(a,b)
|
||||||
-#define ECDSA_SignDigest(a,b,c,d,e,f) ECDSA_SignDigest(a,b,c)
|
-#define ECDSA_SignDigest(a,b,c,d,e,f,g) ECDSA_SignDigest(a,b,c)
|
||||||
#define ECDSA_VerifyDigest(a,b,c,d) ECDSA_VerifyDigest(a,b,c)
|
#define ECDSA_VerifyDigest(a,b,c,d) ECDSA_VerifyDigest(a,b,c)
|
||||||
#define ECDH_Derive(a,b,c,d,e,f) ECDH_Derive(a,b,c,d,e)
|
#define ECDH_Derive(a,b,c,d,e,f) ECDH_Derive(a,b,c,d,e)
|
||||||
#else
|
#else
|
||||||
|
4
sources
4
sources
@ -1,3 +1,3 @@
|
|||||||
SHA512 (systemtap-tapset-3.4.0pre01.tar.xz) = 4446fa20f88bbce53b583484bf06cb2b476c9372beb898dc2b7739eaa5c98b9979fbd72e12474fb344833d831a19366b82216ee03b452411745e6cd3527faa4e
|
SHA512 (systemtap-tapset-3.4.0pre01.tar.xz) = 4446fa20f88bbce53b583484bf06cb2b476c9372beb898dc2b7739eaa5c98b9979fbd72e12474fb344833d831a19366b82216ee03b452411745e6cd3527faa4e
|
||||||
SHA512 (aarch64-port-jdk8u-aarch64-jdk8u131-b12.tar.xz) = b7285cbadc787594664944ece1fab74aafd4f3437d75e494b900cdd5ce1d102c0cfa9d734b40c7f122ba8539f098e6dde19894ab15605f4a475138bf69143edf
|
SHA512 (aarch64-port-jdk8u-aarch64-jdk8u141-b16.tar.xz) = 154cc4bebb9a0809f548f630b5d4fa45befe7e5cf784236540205f254913495157f99f63a5b2223487bbff4c430e60cc53b4aacd9e843309f657929b500b061d
|
||||||
SHA512 (aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u131-b12-shenandoah-merge-2017-04-20.tar.xz) = 9450dca9445b5ed90de90905a1210388fc825caada0d4929ac9f2c81b3af066dfcbcb80a667cb4c1c644d3ac65678d6bc162f1f11c1cd44f9dbf682ca3ff95cd
|
SHA512 (aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u141-b16.tar.xz) = b6bf3383fcd8fb44308eff3ba93a4a635851a4c30e91957c5771990523b0c7c1f7a2acc7ec0472e196c26633a5df7d7b592b933f55ec9cdda63b37a14395ef10
|
||||||
|
@ -31,7 +31,7 @@ if [ "x$REPO_NAME" = "x" ] ; then
|
|||||||
REPO_NAME="jdk8u"
|
REPO_NAME="jdk8u"
|
||||||
fi
|
fi
|
||||||
if [ "x$VERSION" = "x" ] ; then
|
if [ "x$VERSION" = "x" ] ; then
|
||||||
VERSION="aarch64-jdk8u131-b12"
|
VERSION="aarch64-jdk8u141-b16"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "x$COMPRESSION" = "x" ] ; then
|
if [ "x$COMPRESSION" = "x" ] ; then
|
||||||
@ -109,7 +109,7 @@ if [ "x$VERSION" = "xtip" ] ; then
|
|||||||
VERSION="tip"
|
VERSION="tip"
|
||||||
else
|
else
|
||||||
#hardcoding version for anything else except tip
|
#hardcoding version for anything else except tip
|
||||||
VERSION="aarch64-shenandoah-jdk8u131-b12-shenandoah-merge-2017-04-20"
|
VERSION="aarch64-shenandoah-jdk8u141-b16"
|
||||||
fi
|
fi
|
||||||
MAIN_REPO_NAME=$REPO_NAME
|
MAIN_REPO_NAME=$REPO_NAME
|
||||||
REPO_NAME=jdk8u-shenandoah
|
REPO_NAME=jdk8u-shenandoah
|
||||||
|
Loading…
Reference in New Issue
Block a user