From: Hugo Landau Date: Tue, 18 Apr 2023 18:30:56 +0000 (+0100) Subject: QUIC APL: Send STOP_SENDING/RESET_STREAM when XSO is freed X-Git-Tag: openssl-3.2.0-alpha1~843 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9aaafc26e0f301fe07d7141dc4a575ef9a4eb4d9;p=thirdparty%2Fopenssl.git QUIC APL: Send STOP_SENDING/RESET_STREAM when XSO is freed Reviewed-by: Matt Caswell Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/20765) --- diff --git a/ssl/quic/quic_impl.c b/ssl/quic/quic_impl.c index fbcc85e52a1..d74ed362565 100644 --- a/ssl/quic/quic_impl.c +++ b/ssl/quic/quic_impl.c @@ -354,15 +354,20 @@ void ossl_quic_free(SSL *s) assert(ctx.qc->num_xso > 0); --ctx.qc->num_xso; - ctx.xso->stream->deleted = 1; + /* If a stream's send part has not been finished, auto-reset it. */ + if (ctx.xso->stream->sstream != NULL + && !ossl_quic_sstream_get_final_size(ctx.xso->stream->sstream, NULL)) + ossl_quic_stream_map_reset_stream_send_part(ossl_quic_channel_get_qsm(ctx.qc->ch), + ctx.xso->stream, 0); - /* Auto-conclude stream. */ - /* TODO(QUIC): Do RESET_STREAM here instead of auto-conclude */ - if (ctx.xso->stream->sstream != NULL) - ossl_quic_sstream_fin(ctx.xso->stream->sstream); + /* Do STOP_SENDING for the receive part, if applicable. */ + if (ctx.xso->stream->rstream != NULL) + ossl_quic_stream_map_stop_sending_recv_part(ossl_quic_channel_get_qsm(ctx.qc->ch), + ctx.xso->stream, 0); /* Update stream state. */ - ossl_quic_stream_map_update_state(ossl_quic_channel_get_qsm(ctx.xso->conn->ch), + ctx.xso->stream->deleted = 1; + ossl_quic_stream_map_update_state(ossl_quic_channel_get_qsm(ctx.qc->ch), ctx.xso->stream); quic_unlock(ctx.qc);