File 0163-ssl-Fix-timing-issues.patch of Package erlang
From 0e1e2b4af41eb5db6ca3547cbc9946cbdb5f9433 Mon Sep 17 00:00:00 2001
From: Dan Gudmundsson <dgud@erlang.org>
Date: Wed, 11 Mar 2026 14:42:17 +0100
Subject: [PATCH 3/3] ssl: Fix timing issues
---
lib/ssl/test/ssl_api_SUITE.erl | 32 +++++++++++++++++++-------------
lib/ssl/test/ssl_test_lib.erl | 1 +
lib/ssl/test/tls_api_SUITE.erl | 6 +++++-
3 files changed, 25 insertions(+), 14 deletions(-)
diff --git a/lib/ssl/test/ssl_api_SUITE.erl b/lib/ssl/test/ssl_api_SUITE.erl
index c414c3e0ae..6aaf066240 100644
--- a/lib/ssl/test/ssl_api_SUITE.erl
+++ b/lib/ssl/test/ssl_api_SUITE.erl
@@ -1025,11 +1025,14 @@ handshake_continue_timeout(Config) when is_list(Config) ->
Port = ssl_test_lib:inet_port(Server),
- ssl_test_lib:start_client_error([{node, ClientNode}, {port, Port},
- {host, Hostname},
- {from, self()},
- {options, [{verify, verify_peer} | ClientOpts]}]),
-
+ Client = ssl_test_lib:start_client_error([{node, ClientNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {options, [{verify, verify_peer} | ClientOpts]}]),
+ receive {Client, {error,_}} -> ok
+ after 500 -> ct:log("Didn't get any client msg", [])
+ end,
+
ssl_test_lib:check_result(Server, {error,timeout}),
ssl_test_lib:close(Server).
%%------------------------------------------------------------------
@@ -1137,14 +1140,17 @@ hello_server_cancel(Config) when is_list(Config) ->
Port = ssl_test_lib:inet_port(Server),
- ssl_test_lib:start_client_error([{node, ClientNode}, {port, Port},
- {host, Hostname},
- {from, self()},
- {options, ssl_test_lib:ssl_options([{handshake, hello},
- {verify, verify_peer} | ClientOpts
- ], Config)},
- {continue_options, proplists:delete(reuseaddr, ClientOpts)}]),
-
+ Client = ssl_test_lib:start_client_error([{node, ClientNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {options, ssl_test_lib:ssl_options([{handshake, hello},
+ {verify, verify_peer} | ClientOpts
+ ], Config)},
+ {continue_options, proplists:delete(reuseaddr, ClientOpts)}]),
+ receive {Client, {error,_}} -> ok
+ after 500 -> ct:log("Didn't get any client msg", [])
+ end,
+
ssl_test_lib:check_result(Server, ok).
%%--------------------------------------------------------------------
diff --git a/lib/ssl/test/ssl_test_lib.erl b/lib/ssl/test/ssl_test_lib.erl
index 7979dc5f9b..94b20438fb 100644
--- a/lib/ssl/test/ssl_test_lib.erl
+++ b/lib/ssl/test/ssl_test_lib.erl
@@ -3558,6 +3558,7 @@ openssl_allows_server_renegotiate(Config) ->
enough_openssl_crl_support("OpenSSL 0." ++ _) -> false;
+enough_openssl_crl_support("OpenSSL 1.0." ++ _) -> false;
enough_openssl_crl_support(_) -> true.
wait_for_openssl_server(Port, tls) ->
diff --git a/lib/ssl/test/tls_api_SUITE.erl b/lib/ssl/test/tls_api_SUITE.erl
index 39a195f26e..65065d7413 100644
--- a/lib/ssl/test/tls_api_SUITE.erl
+++ b/lib/ssl/test/tls_api_SUITE.erl
@@ -576,10 +576,12 @@ tls_reset_in_active_once(Config) when is_list(Config) ->
{_ClientNode, _ServerNode, Hostname} = ssl_test_lib:run_where(Config),
TcpOpts = [binary, {reuseaddr, true}],
Port = ssl_test_lib:inet_port(node()),
+ Me = self(),
Server = fun() ->
case proplists:get_value(transport, Config) of
socket ->
{ok, Listen} = tls_socket_tcp:listen(Port, TcpOpts),
+ Me ! continue,
{ok, TcpServerSocket} = socket:accept(Listen),
{ok, ServerSocket} = ssl:handshake(TcpServerSocket, ServerOpts),
lists:foreach(
@@ -591,6 +593,7 @@ tls_reset_in_active_once(Config) when is_list(Config) ->
socket:close(Listen);
_ ->
{ok, Listen} = gen_tcp:listen(Port, TcpOpts),
+ Me ! continue,
{ok, TcpServerSocket} = gen_tcp:accept(Listen),
{ok, ServerSocket} = ssl:handshake(TcpServerSocket, ServerOpts),
lists:foreach(
@@ -603,7 +606,8 @@ tls_reset_in_active_once(Config) when is_list(Config) ->
end
end,
spawn_link(Server),
- {ok, Socket} = ssl:connect(Hostname, Port, [{active, false} | ClientOpts]),
+ receive continue -> ok end,
+ {ok, Socket} = ssl:connect(Hostname, Port, [{active, false}, {reuseaddr, true} | ClientOpts]),
Result = tls_closed_in_active_once_loop(Socket),
ssl:close(Socket),
case Result of
--
2.51.0