<feed xmlns='http://www.w3.org/2005/Atom'>
<title>openssl/include/internal, 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-20T12:28:57Z</updated>
<entry>
<title>Fix SSL_poll() multi-reactor cleanup deadlock</title>
<updated>2026-10-20T12:28:57Z</updated>
<author>
<name>Mounir IDRASSI</name>
<email>mounir.idrassi@idrix.fr</email>
</author>
<published>2026-07-31T09:01:15Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=9682b1123accf8f6bf058a402bf7c8be0be5b5d2'/>
<id>urn:sha1:9682b1123accf8f6bf058a402bf7c8be0be5b5d2</id>
<content type='text'>
SSL_poll() cleaned up QUIC reactor wait registrations in item-array
order. Leaving a reactor can block while its notifier is signalled, so
two callers spanning the same reactors could each wait on one reactor
while still registered on another. The translation abort path has the
same ordering problem.

Split QUIC leave into two phases: deregister from every QUIC reactor,
then wait for any notification cycles still pending. For QUIC-only poll
sets this removes every waiter registration before any notifier wait.
DTLS listener cleanup is unchanged. Guard the QUIC drain call for
no-quic builds.

Phase 2 also prevents an immediate re-registration from keeping the
notifier signalled. Capture notify_generation during deregistration so a
wait is bounded to the observed cycle. Apply the same generation bound
to the combined single-reactor leave operation.

Exercise real SSL_poll cleanup on two reactors in both the post-poll and
translation-abort paths, including repeated items sharing a reactor.
Check that a delayed phase-2 waiter completes while a later notification
cycle remains signalled.

Fixes #32130

Assisted-by: OpenCode:GLM-5.2
Assisted-by: Codex:gpt-5.6-sol
Assisted-by: Codex:gpt-6-astra
Reviewed-by: Tomas Mraz &lt;tomas@openssl.foundation&gt;
Reviewed-by: Neil Horman &lt;nhorman@openssl.org&gt;
Merge-date: Tue Oct 20 12:29:05 2026
Merged-from: https://github.com/openssl/openssl/pull/32137
</content>
</entry>
<entry>
<title>DTLS listener: bound the demux free list</title>
<updated>2026-10-14T10:53:51Z</updated>
<author>
<name>Mounir IDRASSI</name>
<email>mounir.idrassi@idrix.fr</email>
</author>
<published>2026-10-12T03:25:23Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=497bdda39a8bbd293d44f0454c0be620c11cc8c2'/>
<id>urn:sha1:497bdda39a8bbd293d44f0454c0be620c11cc8c2</id>
<content type='text'>
The demux free list caches released URXEs so a receive burst can be
served without allocating, but nothing bounds it: a transient flood
raising the per-connection receive queues also raises the free list's
retained high-water mark for the remaining lifetime of the listener.

Add a per-demux limit, ossl_dgram_demux_set_max_free_urxe(), enforced
in ossl_dgram_demux_release_urxe(): a URXE released while the free list
is at its limit is freed instead of cached, so the bound is strict
and no later trim pass is needed. Freeing there honours the documented
contract that no reference may be made to a URXE or its buffer after
it is released, and no release caller touches the entry afterwards.
The DTLS listener sets the limit to DEMUX_MAX_FREE_URXE, two receive
batches, so one full batch can always be cached; QUIC keeps the default
unbounded behaviour.

Resolves: https://github.com/openssl/openssl/issues/33173
Assisted-by: Claude Code:moonshotai/kimi-k3
Reviewed-by: Tomas Mraz &lt;tomas@openssl.foundation&gt;
Reviewed-by: Ryan Hooper &lt;ryanh@openssl.foundation&gt;
Reviewed-by: Eugene Syromiatnikov &lt;esyr@openssl.org&gt;
Merge-date: Wed Oct 14 10:54:56 2026
Merged-from: https://github.com/openssl/openssl/pull/33197
</content>
</entry>
<entry>
<title>DTLS listener: bound the per-connection receive queue</title>
<updated>2026-10-14T10:49:39Z</updated>
<author>
<name>Mounir IDRASSI</name>
<email>mounir.idrassi@idrix.fr</email>
</author>
<published>2026-10-12T03:13:41Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=8a57e59db7b51258e3c9fec8359c90b85b4d5f2c'/>
<id>urn:sha1:8a57e59db7b51258e3c9fec8359c90b85b4d5f2c</id>
<content type='text'>
The DTLS listener queues datagrams from a known peer into a per-connection
list (DTLS_RX::urxe_pending) with no limit on count or bytes. A reachable
peer that completes the ordinary cookie exchange can grow one parked
connection's queue without bound as long as the application keeps
the shared demux pumped, moving datagrams into userspace past the bound
the kernel socket buffer would otherwise provide.

Cap the queue at OSSL_DTLS_RX_DEFAULT_MAX_QUEUED (128) datagrams
per connection - a datagram count, not a byte cap. Every queued URXE
holds a buffer of at least the listener's maximum datagram size whatever
the datagram's length, so a full queue costs about 295 KB per connection
at the default 2000-byte size, roughly one default kernel socket receive
buffer; across a full 256-connection listener budget that is about 75 MB.
The queue is consumed FIFO, so on overflow the oldest datagram is evicted
rather than the newest: a DTLS flight can span several datagrams,
and under overload keeping the newest biases the queue toward the flight
the peer just sent instead of stale fragments of an older one.
The evicted URXE is unhooked under rx-&gt;mutex and released to the demux
after dropping it, so demux-&gt;mutex is never taken while rx-&gt;mutex
is held.

References: https://github.com/openssl/openssl/issues/33173
Assisted-by: Claude Code:moonshotai/kimi-k3
Reviewed-by: Tomas Mraz &lt;tomas@openssl.foundation&gt;
Reviewed-by: Ryan Hooper &lt;ryanh@openssl.foundation&gt;
Reviewed-by: Eugene Syromiatnikov &lt;esyr@openssl.org&gt;
Merge-date: Wed Oct 14 10:54:54 2026
Merged-from: https://github.com/openssl/openssl/pull/33197
</content>
</entry>
<entry>
<title>Change all files with OpenSSL License to ASL 2.0 License</title>
<updated>2026-10-05T09:34:43Z</updated>
<author>
<name>Tomas Mraz</name>
<email>tomas@openssl.foundation</email>
</author>
<published>2026-10-01T14:57:12Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=85cdce464b1bdeab55e620cff0be6bc85a1d3103'/>
<id>urn:sha1:85cdce464b1bdeab55e620cff0be6bc85a1d3103</id>
<content type='text'>
Reviewed-by: Eugene Syromiatnikov &lt;esyr@openssl.org&gt;
Reviewed-by: Dmitry Belyavskiy &lt;beldmit@gmail.com&gt;
Reviewed-by: Simo Sorce &lt;simo@redhat.com&gt;
Reviewed-by: Paul Dale &lt;paul.dale@oracle.com&gt;
Merge-date: Mon Oct  5 09:34:48 2026
Merged-from: https://github.com/openssl/openssl/pull/33070
</content>
</entry>
<entry>
<title>Build the qlog filename with asprintf</title>
<updated>2026-10-02T07:18:03Z</updated>
<author>
<name>Bob Beck</name>
<email>beck@openssl.org</email>
</author>
<published>2026-09-12T03:05:03Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=734b125bd0521f114cb1024d2a70485ed0a14b9e'/>
<id>urn:sha1:734b125bd0521f114cb1024d2a70485ed0a14b9e</id>
<content type='text'>
Replaces the length arithmetic and per-byte snprintf hex loop.
id_len is asserted against QUIC_MAX_CONN_ID_LEN, which the wire
parser already enforces.

ossl_determine_dirsep was awkwardly a char, with only one caller
being this function - remove it from internal/common.h and make
it a static returning a string.

Reviewed-by: Nikola Pajkovsky &lt;nikolap@openssl.org&gt;
Reviewed-by: Andrew Dinh &lt;andrewd@openssl.org&gt;
Merge-date: Fri Oct  2 07:18:25 2026
Merged-from: https://github.com/openssl/openssl/pull/31550
</content>
</entry>
<entry>
<title>Provide ossl_asprintf() and friends.</title>
<updated>2026-10-02T07:18:02Z</updated>
<author>
<name>Bob Beck</name>
<email>beck@openssl.org</email>
</author>
<published>2026-06-16T20:11:33Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=a1b21b9104d65cbd20b9f6386d6668d6a1399fb6'/>
<id>urn:sha1:a1b21b9104d65cbd20b9f6386d6668d6a1399fb6</id>
<content type='text'>
From BoringSSL

Fixes: https://github.com/openssl/project/issues/1914
Reviewed-by: Nikola Pajkovsky &lt;nikolap@openssl.org&gt;
Reviewed-by: Andrew Dinh &lt;andrewd@openssl.org&gt;
Merge-date: Fri Oct  2 07:18:13 2026
Merged-from: https://github.com/openssl/openssl/pull/31550
</content>
</entry>
<entry>
<title>DTLS 1.3: Retain the previous read epoch to recover from lost ACKs</title>
<updated>2026-10-02T06:36:26Z</updated>
<author>
<name>Ryan Hooper</name>
<email>ryanh@openssl.foundation</email>
</author>
<published>2026-09-23T15:32:46Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=4d91a49e557ebe2d3f81ad5517dfaf8933dddfb0'/>
<id>urn:sha1:4d91a49e557ebe2d3f81ad5517dfaf8933dddfb0</id>
<content type='text'>
After processing the client's Finished or a peer KeyUpdate, the read
record layer advanced to the new epoch and the old one was freed
immediately. If the ACK we sent for that message was lost, the peer's
retransmission arrived at the now-discarded epoch: it could not be
authenticated, so no replacement ACK was ever produced and the peer
exhausted its retransmission budget.

RFC9147 section 5.8.1 requires the finished peer to ACK retransmissions
of the other side's final flight, and section 8 requires receive keys
from before a KeyUpdate to be retained until decryption with the new
keys succeeds. Retain exactly one prior read epoch's record layer
instead of freeing it, add a record-layer dispatch hook so the DTLS
method can take ownership of it, and authenticate a record at that
epoch with its own retained keys and replay window when the current
epoch's epoch-bits check would otherwise just drop it. This isn't
limited to replacing lost ACKs: a previous *application* epoch (from
KeyUpdate recovery) can also legitimately supply application data that
arrives reordered relative to the epoch change.

Successful authentication with the retained keys doesn't by itself
prove a record is a retransmission, so let it reach the handshake
layer instead of deciding that here: the DTLS 1.2-only Finished
special case (retransmit our own flight) is skipped for DTLS 1.3, and
the existing out-of-sequence duplicate-ACK path is widened from
post-handshake epochs only to include the epoch a Finished is sent
at -- the sequence and epoch checks in that path are what actually
decide whether a retained-epoch record can be acknowledged.

Fixes: #32891
Assisted-by: Claude:claude-sonnet-5
Reviewed-by: Mounir Idrassi &lt;mounir.idrassi@idrix.fr&gt;
Reviewed-by: Tomas Mraz &lt;tomas@openssl.foundation&gt;
Merge-date: Fri Oct  2 06:36:27 2026
Merged-from: https://github.com/openssl/openssl/pull/32963
</content>
</entry>
<entry>
<title>Fix coding style violation: do not use variable length arrays</title>
<updated>2026-09-29T16:39:51Z</updated>
<author>
<name>Nicky Mouha</name>
<email>nmouha@users.noreply.github.com</email>
</author>
<published>2026-09-23T19:20:49Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=c7ac53a99a7bffe2897a383619f2be1a3fc1ab97'/>
<id>urn:sha1:c7ac53a99a7bffe2897a383619f2be1a3fc1ab97</id>
<content type='text'>
Signed-off-by: Nicky Mouha &lt;nmouha@users.noreply.github.com&gt;
Reviewed-by: Neil Horman &lt;nhorman@openssl.org&gt;
Reviewed-by: Paul Dale &lt;paul.dale@oracle.com&gt;
Reviewed-by: Tomas Mraz &lt;tomas@openssl.foundation&gt;
Merge-date: Tue Sep 29 16:40:02 2026
Merged-from: https://github.com/openssl/openssl/pull/32967
</content>
</entry>
<entry>
<title>Enforce final size for streams.</title>
<updated>2026-09-26T11:35:08Z</updated>
<author>
<name>Alexandr Nedvedicky</name>
<email>sashan@openssl.org</email>
</author>
<published>2026-09-09T09:09:19Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=9539a15da51bc57efe28df79edc84fd3f8b11a28'/>
<id>urn:sha1:9539a15da51bc57efe28df79edc84fd3f8b11a28</id>
<content type='text'>
When FIN stream frame is received at particular offset,
then the FIN's offset must be the largest offset kept
in stream reassembly buffer.

Receiving stream frame with offset larger than FIN frame
must be reported as protocol violation and connection
must be closed.

In order to report protocol violation error the stream
reassembly module must have a reference to QUIC_CHANNEL
object where particular stream belongs to. The refernce
to channel is part of QUIC_RSTREAM_QPARAM structure.
This change makes stream quality parameter mandatory.

Co-authored-by: Jakub Zelenka &lt;bukka@php.net&gt;
Reviewed-by: Tomas Mraz &lt;tomas@openssl.foundation&gt;
Reviewed-by: Mounir Idrassi &lt;mounir.idrassi@idrix.fr&gt;
Merge-date: Sat Sep 26 11:35:33 2026
Merged-from: https://github.com/openssl/openssl/pull/32038
</content>
</entry>
<entry>
<title>Limit packet buffer overhead to ~64kB per stream.</title>
<updated>2026-09-26T11:35:08Z</updated>
<author>
<name>Alexandr Nedvedicky</name>
<email>sashan@openssl.org</email>
</author>
<published>2026-07-27T07:54:00Z</published>
<link rel='alternate' type='text/html' href='http://git.bktus.com/gpgfrontend/openssl/commit/?id=1121081b2a4667a77c641e9a4d00257d4c8342b6'/>
<id>urn:sha1:1121081b2a4667a77c641e9a4d00257d4c8342b6</id>
<content type='text'>
There is currently no limit on how many bytes of packet
buffers each stream can hold in memory. To monitor and limit
the size of packet buffers used by stream the change accounts
so called stream chunk overhead which is a delta between
actual datagram size of packet delivering the particular
stream chunk and chunk itself. As soon as the chunk overhead
exceeds ~64kB for all stream chunks kept in receive buffer,
the newly received chunks will be moved from packet buffer
to stream buffer.

The packet buffer overhead limit is held in newly introduced
structure QUIC_RSTREAM_QPARAM (RX stream quality parameter).
If new additional quality parameters are added, then those
should be part of QUIC_RSTREAM_QPARAM structure.

this changeset introduces QUIC_RSTREAM_QPARAM

the the rsqp (reead stream quality parameter) enables
channel to control quality of RX stream. quality currently
means the packet buffer overhead. more parameters
may be added later.

Fixes: CVE-2026-54873
Reviewed-by: Tomas Mraz &lt;tomas@openssl.foundation&gt;
Reviewed-by: Mounir Idrassi &lt;mounir.idrassi@idrix.fr&gt;
Merge-date: Sat Sep 26 11:35:32 2026
Merged-from: https://github.com/openssl/openssl/pull/32038
</content>
</entry>
</feed>
