<feed xmlns='http://www.w3.org/2005/Atom'>
<title>openssl/test, branch master</title>
<subtitle>TLS/SSL and crypto library.</subtitle>
<id>http://git.bktus.com/gpgfrontend/openssl/atom?h=master</id>
<link rel='self' href='http://git.bktus.com/gpgfrontend/openssl/atom?h=master'/>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/'/>
<updated>2026-10-24T09:43:46Z</updated>
<entry>
<title>test/cmp_client_test.c: add RR tests with issuer or serialNumber missing</title>
<updated>2026-10-24T09:43:46Z</updated>
<author>
<name>Daniel Kubec</name>
<email>kubec@openssl.foundation</email>
</author>
<published>2026-10-01T17:59:34Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=a752594ed84476fbb516b0f43e15de513dcd4a14'/>
<id>urn:sha1:a752594ed84476fbb516b0f43e15de513dcd4a14</id>
<content type='text'>
Issuer and serialNumber are independently OPTIONAL in a CertTemplate,
and the library hands them to the process_rr callback separately.
The OpenSSL CMP client always sends both, so the mock server has never
been exercised with an RR that carries only one of them.

Assisted-by: Claude:claude-fable-5-1
Reviewed-by: Dmitry Belyavskiy &lt;beldmit@gmail.com&gt;
Reviewed-by: Mounir Idrassi &lt;mounir.idrassi@idrix.fr&gt;
Reviewed-by: Eugene Syromiatnikov &lt;esyr@openssl.org&gt;
Merge-date: Sat Oct 24 09:44:20 2026
Merged-from: https://github.com/openssl/openssl/pull/33071
</content>
</entry>
<entry>
<title>Migrate test_gcm_reinit from evp_extra_test.c to evp_aead_test.c</title>
<updated>2026-10-23T20:40:10Z</updated>
<author>
<name>Danny Nichols</name>
<email>dtn7890@rit.edu</email>
</author>
<published>2026-10-21T23:36:51Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=45f7d8c83454f738427d1896b10dd4e4e21ecbc0'/>
<id>urn:sha1:45f7d8c83454f738427d1896b10dd4e4e21ecbc0</id>
<content type='text'>
Reviewed-by: Neil Horman &lt;nhorman@openssl.org&gt;
Reviewed-by: Bob Beck &lt;beck@openssl.org&gt;
Merge-date: Fri Oct 23 20:40:17 2026
Merged-from: https://github.com/openssl/openssl/pull/33308
</content>
</entry>
<entry>
<title>QUIC: resend the whole ClientHello after a Retry</title>
<updated>2026-10-23T12:53:53Z</updated>
<author>
<name>Nikolas Gauder</name>
<email>nikolas.gauder@tum.de</email>
</author>
<published>2026-10-21T16:42:30Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=c69b5af10a754051274ef2e5ed17f47753bd6ea9'/>
<id>urn:sha1:c69b5af10a754051274ef2e5ed17f47753bd6ea9</id>
<content type='text'>
When the client received a Retry, ch_retry() marked only its first
Initial packet as pseudo-lost, assuming that the ClientHello fits in
it.  Since 3.5 the default key shares (X25519MLKEM768 and X25519) put
the ClientHello into two Initial packets.  The second one stayed in
flight, so the client resent only the first part of the ClientHello,
and the server could do no more than acknowledge it.  The rest was sent
only once that acknowledgement had the second packet declared lost:
one more round trip for every Retry, and a congestion event that halved
the congestion window although nothing was lost.

RFC 9002 section 6.3 has a client that receives a Retry reset its loss
recovery state, as the server processed none of its Initial packets.
Mark every Initial packet still in flight as pseudo-lost instead.
ch_restart() marked only the first Initial packet after version
negotiation in the same way.  It now shares the helper, so ch_retry()
no longer needs drop_later_pn to work out which packet number to mark.

A Version Negotiation packet and a Retry can be processed in the same
batch of datagrams.  The first then leaves no Initial packet in flight
for the second, and their data is already queued, so that is not an
error.  test_quic_retry_after_version_neg covers this order.

The SSL_trace reference recorded the extra round trip, and is updated.
The radix forbidden_frame_types script injects a frame into the
server's Initial packets.  With the whole ClientHello sent at once, a
post-quantum ServerHello can fill the server's only Initial packet,
leaving no room, so the script's server now uses classical groups.

Fixes: f538b4215528 "QUIC_CHANNEL: Implementation"
Fixes #33077
Assisted-by: Claude:claude-opus-5-5

Reviewed-by: Mounir Idrassi &lt;mounir.idrassi@idrix.fr&gt;
Reviewed-by: Saša Nedvědický &lt;sashan@openssl.org&gt;
Merge-date: Fri Oct 23 12:53:54 2026
Merged-from: https://github.com/openssl/openssl/pull/33298
</content>
</entry>
<entry>
<title>QUIC: release pseudo-lost packets from the congestion controller</title>
<updated>2026-10-23T12:53:45Z</updated>
<author>
<name>Nikolas Gauder</name>
<email>nikolas.gauder@tum.de</email>
</author>
<published>2026-10-21T16:40:34Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=a87db42e4647d36fb82464d9493145ccc9bd21ed'/>
<id>urn:sha1:a87db42e4647d36fb82464d9493145ccc9bd21ed</id>
<content type='text'>
On a Retry, and after version negotiation, the client marks Initial
packets it has sent as pseudo-lost, so that their CRYPTO data is sent
again.  The ACK manager then stops counting them as in flight, but on
purpose does not report them to the congestion controller as lost,
since the network lost nothing.  The congestion controller is not told
about them at all, so NewReno kept counting their bytes as in flight
for the rest of the connection, and allowed that much less to be sent.

Release them with on_data_invalidated(), as when a packet number space
is discarded.  The congestion window is left alone.  This follows the
approach proposed in #33099.

Fixes: 90699176b074 "QUIC CC: Major revisions to CC abstract interface"
Fixes #33079
Assisted-by: Claude:claude-opus-5-5

Reviewed-by: Mounir Idrassi &lt;mounir.idrassi@idrix.fr&gt;
Reviewed-by: Saša Nedvědický &lt;sashan@openssl.org&gt;
Merge-date: Fri Oct 23 12:53:54 2026
Merged-from: https://github.com/openssl/openssl/pull/33298
</content>
</entry>
<entry>
<title>test: clear stale RADIX handshake injection selectors</title>
<updated>2026-10-23T12:40:34Z</updated>
<author>
<name>Mounir IDRASSI</name>
<email>mounir.idrassi@idrix.fr</email>
</author>
<published>2026-10-15T06:07:16Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=4bfa36be77cd5f804d53801a21f027a741b9b097'/>
<id>urn:sha1:4bfa36be77cd5f804d53801a21f027a741b9b097</id>
<content type='text'>
The handshake injection helpers share radix_fault with earlier scripts
but left its selector words unchanged. script_68 leaves word0 set to 1,
which selects CertificateRequest. script_69 installs the same callback
before it sets word0 to 2 for KeyUpdate. A session ticket generated in
that interval can trigger the previous script's fault and close the
connection before the intended KeyUpdate injection.

Clear both selector words in the handshake injection setup paths, as
the plaintext injection setup already does. Request a normal session
ticket in script_69 before arming its fault, so the test exercises the
interval where an inherited selector caused the unexpected close.
Keep the expected KeyUpdate close code unchanged.

Assisted-by: Codex:gpt-6-astra
Reviewed-by: Tomas Mraz &lt;tomas@openssl.foundation&gt;
Reviewed-by: Nikola Pajkovsky &lt;nikolap@openssl.org&gt;
Merge-date: Fri Oct 23 12:40:35 2026
Merged-from: https://github.com/openssl/openssl/pull/33213
</content>
</entry>
<entry>
<title>test: make RADIX QUIC objects nonblocking by default</title>
<updated>2026-10-23T12:40:34Z</updated>
<author>
<name>Mounir IDRASSI</name>
<email>mounir.idrassi@idrix.fr</email>
</author>
<published>2026-10-14T09:37:37Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=8c8c85cdc4470140c6b918d85ab45a6a0ad9547a'/>
<id>urn:sha1:8c8c85cdc4470140c6b918d85ab45a6a0ad9547a</id>
<content type='text'>
RADIX drives both endpoints and advances its simulated clock from one
interpreter. Accepted server connections inherit blocking mode from their
listeners, even though the underlying UDP sockets are nonblocking.

Extra handshake retries advance fake time and can inflate the initial
RTT estimates. In the one-way key update loops the server's estimate can
stay high while later samples reduce the client's PTO. The server can
then retain its previous receive keys for longer than the client waits
before its next update. Packets starting that update are then discarded,
as permitted by RFC 9001 section 6.5. A blocking server read prevents the
interpreter from driving client retransmission or advancing the clock,
so this recoverable discard becomes a hang. The interpreter's 60-second
deadline cannot interrupt the call, leaving the process watchdog to abort.
External UDP loss is not required to reproduce the failure.

Set clients and listeners to nonblocking mode at construction, including
listeners created from a domain and the custom listener constructors.
Accepted connections and their streams inherit this setting. The client
setting makes the construction policy consistent before OP_CONNECT_WAIT,
which also sets its mode. Retain the domain blocking capability needed
by SSL_poll and document how tests can explicitly enable blocking I/O.

Add a regression using existing opcodes to delay an ACK, increase the
server's PTO and require recovery across successive client key updates.
Cover both listener creation paths. Check listener and client modes before
connection establishment and the accepted server's mode, so a recurrence
fails promptly instead of waiting for the process watchdog.

Fixes #33206.

Assisted-by: Codex:gpt-6-astra
Reviewed-by: Tomas Mraz &lt;tomas@openssl.foundation&gt;
Reviewed-by: Nikola Pajkovsky &lt;nikolap@openssl.org&gt;
Merge-date: Fri Oct 23 12:40:35 2026
Merged-from: https://github.com/openssl/openssl/pull/33213
</content>
</entry>
<entry>
<title>DTLS listener: do not drive idle pending connections every tick</title>
<updated>2026-10-22T14:52:20Z</updated>
<author>
<name>Matt Caswell</name>
<email>matt@openssl.foundation</email>
</author>
<published>2026-10-19T12:21:04Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=4af5800f0ce6c566bb64ae55b02a5a4dd2a6b8fe'/>
<id>urn:sha1:4af5800f0ce6c566bb64ae55b02a5a4dd2a6b8fe</id>
<content type='text'>
Every listener tick called SSL_accept() on every pending connection,
whether or not anything had arrived for it, and each such call pumped
the demux with another recvmmsg(). SSL_poll() ticks the listener once
per item, so 256 one-byte datagrams from distinct source ports, which
fill the pending table for 30 s, made every SSL_poll() over N
connections cost (N + 1) * 256 futile SSL_accept() calls.

Record whether the last drive left a pending connection waiting for
its peer, and skip it until a datagram is queued for it or its
retransmission timer expires.

Driving one connection pumps the demux, which can queue a datagram for
a connection the tick skipped or has already driven while emptying the
socket the caller then waits on. Drive again when that happens, up to
DTLS_LISTENER_MAX_DRIVE_PASSES times, and do not let a wait on the
listener or on its connections sleep while such input remains.

Discovered by Anthropic's OSS Scanner (finding ANT-2026-EFVK6J4Z).

Assisted-by: Claude:claude-opus-5-5
Reviewed-by: Tomas Mraz &lt;tomas@openssl.foundation&gt;
Reviewed-by: Saša Nedvědický &lt;sashan@openssl.org&gt;
Reviewed-by: Ryan Hooper &lt;ryanh@openssl.foundation&gt;
Reviewed-by: Mounir Idrassi &lt;mounir.idrassi@idrix.fr&gt;
Merge-date: Thu Oct 22 14:38:07 2026
Merged-from: https://github.com/openssl/openssl/pull/33265
</content>
</entry>
<entry>
<title>DTLS listener: free a pending connection that fails after HVR</title>
<updated>2026-10-22T14:52:20Z</updated>
<author>
<name>Matt Caswell</name>
<email>matt@openssl.foundation</email>
</author>
<published>2026-10-19T12:19:38Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=0966e103ebf36b48c51c384e1954093536df2a63'/>
<id>urn:sha1:0966e103ebf36b48c51c384e1954093536df2a63</id>
<content type='text'>
dtls_listener_conn_needs_retry() reported a DTLS 1.2 connection as
waiting for its second ClientHello whenever its handshake state was
DTLS_ST_SW_HELLO_VERIFY_REQUEST, even if the connection had since
entered the error state, e.g. on receiving a fatal alert from the peer.
The listener then kept it in its pending table, and called SSL_accept()
on it every tick, until the pending timeout expired instead of freeing
it as a failed connection.

Check ossl_statem_in_error() as the DTLS 1.3 HRR case already does.

Assisted-by: Claude:claude-opus-5-5
Reviewed-by: Tomas Mraz &lt;tomas@openssl.foundation&gt;
Reviewed-by: Saša Nedvědický &lt;sashan@openssl.org&gt;
Reviewed-by: Ryan Hooper &lt;ryanh@openssl.foundation&gt;
Reviewed-by: Mounir Idrassi &lt;mounir.idrassi@idrix.fr&gt;
Merge-date: Thu Oct 22 14:38:07 2026
Merged-from: https://github.com/openssl/openssl/pull/33265
</content>
</entry>
<entry>
<title>DTLS 1.3: Fix WANT_READ while awaiting ServerHello</title>
<updated>2026-10-22T06:08:29Z</updated>
<author>
<name>Ryan Hooper</name>
<email>ryanh@openssl.foundation</email>
</author>
<published>2026-10-19T17:30:02Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=d94c6a253a12674972c4620ce6ec34cdb12bafa1'/>
<id>urn:sha1:d94c6a253a12674972c4620ce6ec34cdb12bafa1</id>
<content type='text'>
After HelloRetryRequest, buffering records from a later epoch can
request a retry without reading the BIO. Supply missing read-retry
flags so SSL_get_error() reports SSL_ERROR_WANT_READ rather than
SSL_ERROR_SYSCALL. Preserve existing retry conditions and handle
listener connections without a read BIO.

Add regression tests for delayed ServerHello delivery and permanent
loss followed by timeout-driven retransmission. Check WANT_READ and
an empty error queue after every retry, then verify handshake
completion and bidirectional application data.

Fixes: #33241
Assisted-by: Claude Code:claude-sonnet-5-5
Assisted-by: OpenCode:github-copilot/gpt-6-astra
Reviewed-by: Tomas Mraz &lt;tomas@openssl.foundation&gt;
Reviewed-by: Mounir Idrassi &lt;mounir.idrassi@idrix.fr&gt;
Merge-date: Thu Oct 22 06:08:35 2026
Merged-from: https://github.com/openssl/openssl/pull/33268
</content>
</entry>
<entry>
<title>Fix wrong alignment in tho allocator used in quic_stream test.</title>
<updated>2026-10-21T17:09:29Z</updated>
<author>
<name>rainerjung</name>
<email>rainer.jung@kippdata.de</email>
</author>
<published>2026-10-13T10:11:05Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=f48b4e3b74a5f08e104f2d13e8a85d6a690c69a7'/>
<id>urn:sha1:f48b4e3b74a5f08e104f2d13e8a85d6a690c69a7</id>
<content type='text'>
Wrong alignment observed on Solaris Sparc 10 (bus error).
THO_ALLOC_HDR has size 20 and memory for structures gets allocated at addresses
directly following a THO_ALLOC_HDR.

Backport needed for the 4.1 branch.

Fixes https://github.com/openssl/openssl/issues/33187

Reviewed-by: Eugene Syromiatnikov &lt;esyr@openssl.org&gt;
Reviewed-by: Nikola Pajkovsky &lt;nikolap@openssl.org&gt;
Merge-date: Wed Oct 21 17:10:20 2026
Merged-from: https://github.com/openssl/openssl/pull/33204
</content>
</entry>
</feed>
