quic: fix incoming port cleanup on failure
port_make_channel() builds an incoming QUIC channel in stages: allocate the channel, create the user SSL and inner TLS objects, optionally copy qlog state, then initialise the channel. Under the mfail allocator, failures in the middle of that sequence could leave ownership split between the partially-created channel and the user SSL, leaking allocations from ossl_quic_channel_alloc(). Make port_new_handshake_layer() return the created user SSL to port_make_channel() and detach the borrowed channel before cleaning up its own failures. port_make_channel() now owns the error path: it detaches any created user SSL from the channel, frees the channel exactly once according to whether channel initialisation already ran cleanup, and then frees the user SSL. Also make QUIC stream map cleanup tolerate a NULL map during partial channel cleanup, and add a focused mfail regression test for ossl_quic_port_create_incoming(). Fixes: https://github.com/openssl/openssl/issues/31014 Signed-off-by: Nikola Pajkovsky <nikolap@openssl.org> Reviewed-by: Saša Nedvědický <sashan@openssl.org> Reviewed-by: Matt Caswell <matt@openssl.foundation> Reviewed-by: Neil Horman <nhorman@openssl.org> MergeDate: Tue May 12 12:01:04 2026 (Merged from https://github.com/openssl/openssl/pull/31038)
N
Nikola Pajkovsky committed
de68b193a580ea2fdc800ee08cb30b4c28601a22
Parent: 51e7447
Committed by Neil Horman <nhorman@openssl.org>
on 5/12/2026, 12:00:59 PM