Files
Ryan Hooper db3319eae3 TLSProxy: track message reassembly per sender, not globally
TLSProxy::Message::get_messages() kept a single set of reassembly
buffers shared between the client and the server, even though DTLS
legitimately allows each side to have its own in-flight,
independently fragmented handshake message at the same time.

When a peer switch happened while the other side's fragment was still
incomplete (e.g. the client's fatal alert reaching the proxy before
the server's second CertificateVerify datagram), the previous code
discarded the buffered fragment to avoid a crash. That stops the
die(), but the discarded bytes are unrecoverable: when the server's
real second datagram arrives afterward, it is reparsed as the start
of a brand new message instead of its continuation, and buffers
forever waiting for a first half that will never arrive. In a live
run that is indistinguishable from a hang until Proxy.pm's "no
progress" counter trips, i.e. an intermittent, timing-dependent test
failure rather than a clean crash.

Give the client and server independent reassembly state instead, so a
record from one peer can never observe or clobber the other peer's
in-progress fragment. The special-cased "changed peer" discard/die
branch is no longer needed and is removed.

Assisted-by: Claude:claude-sonnet-5
Reviewed-by: Frederik Wedel-Heinen <fwh.openssl@gmail.com>
Reviewed-by: Tomas Mraz <tomas@openssl.foundation>
Merge-date: Mon Sep 21 09:41:08 2026
Merged-from: https://github.com/openssl/openssl/pull/32831
2026-09-21 11:41:03 +02:00
..
2026-09-09 13:12:46 +00:00
2026-09-09 13:12:46 +00:00
2026-09-09 13:12:46 +00:00
2026-09-09 13:12:46 +00:00
2026-09-09 13:12:46 +00:00
2025-09-02 13:05:45 +00:00
2026-09-09 13:12:46 +00:00
2026-09-09 13:12:46 +00:00
2026-09-09 13:12:46 +00:00