--- old/test/lib/jdk/test/lib/process/ProcessTools.java 2018-08-31 11:36:29.000000000 -0700 +++ new/test/lib/jdk/test/lib/process/ProcessTools.java 2018-08-31 11:36:28.000000000 -0700 @@ -40,6 +40,9 @@ import java.util.function.Predicate; import java.util.function.Consumer; import java.util.stream.Collectors; +import java.security.AccessController; +import java.security.PrivilegedActionException; +import java.security.PrivilegedExceptionAction; import jdk.test.lib.JDKToolFinder; import jdk.test.lib.Utils; @@ -69,7 +72,7 @@ * @throws IOException If an I/O error occurs. */ public static OutputBuffer getOutput(ProcessBuilder processBuilder) throws IOException { - return getOutput(processBuilder.start()); + return getOutput(privilegedStart(processBuilder)); } /** @@ -201,7 +204,7 @@ TimeUnit unit) throws IOException, InterruptedException, TimeoutException { System.out.println("["+name+"]:" + processBuilder.command().stream().collect(Collectors.joining(" "))); - Process p = processBuilder.start(); + Process p = privilegedStart(processBuilder); StreamPumper stdout = new StreamPumper(p.getInputStream()); StreamPumper stderr = new StreamPumper(p.getErrorStream()); @@ -393,7 +396,7 @@ Process p = null; boolean failed = false; try { - p = pb.start(); + p = privilegedStart(pb); output = new OutputAnalyzer(p); p.waitFor(); @@ -495,6 +498,17 @@ return analyzer; } + private static Process privilegedStart(ProcessBuilder pb) throws IOException { + try { + return AccessController.doPrivileged( + (PrivilegedExceptionAction) () -> pb.start()); + } catch (PrivilegedActionException e) { + @SuppressWarnings("unchecked") + IOException t = (IOException) e.getException(); + throw t; + } + } + private static class ProcessImpl extends Process { private final Process p;