[jdk8u-dev] Withdrawn: 8173339: AArch64: Fix minimum stack size computations

duke duke at openjdk.org
Thu Jul 28 05:22:46 UTC 2022


On Mon, 30 May 2022 03:22:04 GMT, Dongbo He <dongbohe at openjdk.org> wrote:

> Hi,
> 
> I would like to backport this patch to fix minimum stack size computations on AArch64.
> I updated the value directly on `define_pd_global` because [JDK-8078556](https://bugs.openjdk.java.net/browse/JDK-8078556) is not in 8u.
> 
> Testing: Performed full jtreg test aarch64-linux-gnu platforms with 4k page size.
> Following test case worked correctly after patch.
> Before patch:
> $ java TLSStackOverflow
> [1]    35476 segmentation fault (core dumped) java TLSStackOverflow
> After patch:
> $ java TLSStackOverflow
> got expected stackoverflow, passed
> 
> $ keytool -genkey -keyalg RSA -keystore localhost-rsa.jks -storepass changeit -storetype pkcs12
> $ cat TLSStackOverflow.java
> 
> import javax.net.ServerSocketFactory;
> import javax.net.SocketFactory;
> import javax.net.ssl.*;
> import java.io.*;
> import java.net.InetAddress;
> import java.net.InetSocketAddress;
> import java.net.Socket;
> import java.security.KeyStore;
> import java.security.KeyStoreException;
> import java.security.NoSuchAlgorithmException;
> import java.security.SecureRandom;
> import java.security.cert.CertificateException;
> import java.security.cert.X509Certificate;
> 
> public class TLSStackOverflow
> {
> 
>     private static final String keystore = "/home/hedongbo/myprojects/study/stackoverflow/new/localhost-rsa.jks";
>     private static final char[] passphrase = "changeit".toCharArray();
>     private static final int port = 8447;
> 
>     private static KeyStore pfx = null;
> 
>     public static void doWrite(OutputStream out) throws Exception {
>         out.write("hello".getBytes(), 0, 3);
>         out.flush();
>         doWrite(out);
>     }
> 
>     public TLSStackOverflow()
>     {}
> 
>     public static void main(String[] args) throws Exception
>     {
>         new Thread(() -> {
>             try {
>                 pfx = KeyStore.getInstance("PKCS12");
>                 pfx.load(new FileInputStream(keystore), passphrase);
>                 SSLContext ctx = SSLContext.getInstance("TLS");
>                 KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
>                 kmf.init(pfx, passphrase);
>                 KeyManager[] kms = kmf.getKeyManagers();
>                 ctx.init(kms, null, null);
>                 ServerSocketFactory fact = ctx.getServerSocketFactory();
>                 SSLServerSocket serversocket = (SSLServerSocket) fact.createServerSocket(port);
>                 while (true)
>                 {
>                     Socket socket = null;
>                     try
>                     {
>                         socket = serversocket.accept();
> 
>                         DataInputStream in = new DataInputStream(socket.getInputStream());
>                         DataOutputStream out = new DataOutputStream(socket.getOutputStream());
> 
>                         byte[] buf = new byte[8192];
>                         int len = in.read(buf);
>                     }
>                     catch (Exception e)
>                     {
>                         e.printStackTrace();
>                     }
>                     finally
>                     {
> //                        try
> //                        {
> //                            socket.close();
> //                        }
> //                        catch (Exception e) {
> //                            e.printStackTrace();
> //                        }
>                     }
>                 }
>             } catch (Exception e) {
>                 e.printStackTrace();
>             }
>         }).start();
> 
>         Thread.sleep(2000);
> 
>         new Thread(() -> {
>             SSLSocket socket = null;
>             try {
>                 pfx = KeyStore.getInstance("PKCS12");
>                 pfx.load(new FileInputStream(keystore), passphrase);
>                 SSLContext ctx = SSLContext.getInstance("TLS");
>                 KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
>                 kmf.init(pfx, passphrase);
>                 TrustAllManager[] trust = { new TrustAllManager() };
>                 ctx.init(null, trust, null);
>                 SocketFactory fact = ctx.getSocketFactory();
>                 socket = (SSLSocket) fact.createSocket();
>                 socket.connect(new InetSocketAddress(InetAddress.getLoopbackAddress(), port), 2000);
>                 socket.setTcpNoDelay(true);
>                 socket.startHandshake();
> 
>                 DataInputStream in = new DataInputStream(socket.getInputStream());
>                 DataOutputStream out = new DataOutputStream(socket.getOutputStream());
> 
>                 String s = "GET " + " HTTP/1.1\r\n";
>                 s+= "Accept: */*\r\n";
>                 s+= "User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)\r\n";
>                 s+= "Connection: Close\r\n";
>                 s+= "\r\n";
>                 try {
>                     doWrite(out);
>                 } catch (StackOverflowError e) {
>                     System.out.println("got expected stackoverflow, passed");
>                     System.exit(0);
>                 }
> 
>                 byte[] buf = new byte[8192];
>                 int len = in.read(buf);
>                 if (len == -1)
>                 {
>                     System.out.println("eof");
>                     return;
>                 }
>                 System.out.println(new String(buf, 0, len));
>             }
>             catch (Exception e)
>             {
>                 e.printStackTrace();
>             }
>             finally
>             {
>                 try
>                 {
>                     socket.close();
>                 }
>                 catch (Exception e)
>                 {}
>             }
> 
>         }).start();
> 
>     }
> 
> }
> 
> 
> class TrustAllManager implements X509TrustManager
> {
>     private X509Certificate[] issuers;
> 
>     public TrustAllManager()
>     {
>         this.issuers = new X509Certificate[0];
>     }
> 
>     public X509Certificate[] getAcceptedIssuers()
>     {
>         return issuers ;
>     }
> 
>     public void checkClientTrusted(X509Certificate[] chain, String authType)
>     {}
> 
>     public void checkServerTrusted(X509Certificate[] chain, String authType)
>     {}
> }

This pull request has been closed without being integrated.

-------------

PR: https://git.openjdk.org/jdk8u-dev/pull/66


More information about the jdk8u-dev mailing list