BUG/MINOR: quic: acknowledge STREAM frame even if MUX is released

When the MUX is freed, the quic-conn layer may stay active until all
streams acknowledgment are processed. In this interval, if a new stream
is opened by the client, the quic-conn is thus now responsible to handle
it. This is done by the emission of a STOP_SENDING + RESET_STREAM.

Prior to this patch, the received packet was not acknowledged. This is
undesirable if the quic-conn is able to properly reject the request as
this can lead to unneeded retransmission from the client.

This must be backported up to 2.6.

(cherry picked from commit 156a89aef8)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
(cherry picked from commit 49c35005d7f488524b009aa8ade7e8946660bd0b)
Signed-off-by: Amaury Denoyelle <adenoyelle@haproxy.com>
This commit is contained in:
Amaury Denoyelle 2023-02-20 10:32:16 +01:00
parent 03414c0bd1
commit 364f770151

View File

@ -2937,11 +2937,16 @@ static int qc_parse_pkt_frms(struct quic_conn *qc, struct quic_rx_packet *pkt,
else {
TRACE_DEVEL("No mux for new stream", QUIC_EV_CONN_PRSHPKT, qc);
if (qc->app_ops == &h3_ops) {
if (!qc_h3_request_reject(qc, stream->id))
TRACE_ERROR("could not enqueue STOP_SENDING frame", QUIC_EV_CONN_PRSHPKT, qc);
if (!qc_h3_request_reject(qc, stream->id)) {
TRACE_ERROR("error on request rejection", QUIC_EV_CONN_PRSHPKT, qc);
/* This packet will not be acknowledged */
goto leave;
}
}
else {
/* This packet will not be acknowledged */
goto leave;
}
/* This packet will not be acknowledged */
goto leave;
}
}