From: Amaury Denoyelle Date: Thu, 21 Dec 2023 10:15:19 +0000 (+0100) Subject: BUG/MINOR: mux-quic: disable fast-fwd if connection on error X-Git-Tag: v3.0-dev1~40 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=19f4f4d890bc28bbe4b850e1ced9be399f59fafb;p=thirdparty%2Fhaproxy.git BUG/MINOR: mux-quic: disable fast-fwd if connection on error Add a check on nego_ff to ensure connection is not on error. If this is the case, fast-forward is disable to prevent unnecessary sending. If snd_buf is latter called, stconn will be notified of the error to interrupt the stream. This check is necessary to ensure snd_buf and nego_ff are consistent. Note that previously, if fast-forward was conducted even on connection error, no sending would occur as qcc_io_send() also check these flags. However, there is a risk that stconn is never notified of the error status, thus it is considered as a bug. Its impact is minimal for now as fast-forward is disable by default on QUIC. By fixing it, it should be possible to reactive it soon. This should be backported up to 2.9. --- diff --git a/src/mux_quic.c b/src/mux_quic.c index 21b1cdec79..1ad4a07de1 100644 --- a/src/mux_quic.c +++ b/src/mux_quic.c @@ -2868,6 +2868,15 @@ static size_t qmux_strm_nego_ff(struct stconn *sc, struct buffer *input, goto end; } + if (qcs->qcc->flags & (QC_CF_ERR_CONN|QC_CF_ERRL)) { + /* Disable fast-forward if connection is on error. Eventually, + * error will be reported to stream-conn if snd_buf is invoked. + */ + TRACE_DEVEL("connection in error", QMUX_EV_STRM_SEND, qcs->qcc->conn, qcs); + qcs->sd->iobuf.flags |= IOBUF_FL_NO_FF; + goto end; + } + /* Alawys disable splicing */ qcs->sd->iobuf.flags |= IOBUF_FL_NO_SPLICING;