]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: mux-quic: disable fast-fwd if connection on error
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Thu, 21 Dec 2023 10:15:19 +0000 (11:15 +0100)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Thu, 21 Dec 2023 14:42:08 +0000 (15:42 +0100)
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.

src/mux_quic.c

index 21b1cdec79a5eb39a45a94b76b1a5c8c4f9b2412..1ad4a07de10d7fc99764339c7225af484a3cfe66 100644 (file)
@@ -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;