From: Amaury Denoyelle Date: Wed, 1 Jul 2026 12:36:45 +0000 (+0200) Subject: BUG/MINOR: mux_quic: prevent multiple STOP_SENDING emission per stream X-Git-Url: http://git.kaiwu.me/postgresql/log/contrib/postgres_fdw/static/%7B@url%7D?a=commitdiff_plain;h=364d16030a2c2715f28e8b345ab83a788b89d23a;p=haproxy.git BUG/MINOR: mux_quic: prevent multiple STOP_SENDING emission per stream A QUIC stream may be aborted to ignore future data read. This also prepares a STOP_SENDING frame to instruct the peer to close its write channel. This capability is exposed via qcc_abort_stream_read() which should be guarded against multiple invokation for a single stream. This was checked via QC_SF_TO_STOP_SENDING flag. However, this flag is resetted once STOP_SENDING frame is emitted. Thus in theory it could be possible to emit several STOP_SENDING for a single stream. This patch improves this by using QC_SF_READ_ABORTED flag check. This flag is set during qcc_abort_stream_read() and never removed even after STOP_SENDING frame is emitted. This bug was never encountered in a real situation. However, this patch is necessary to definitely guarantee that it cannot occur. This should be backported up to 2.8. --- diff --git a/src/mux_quic.c b/src/mux_quic.c index ce0bc488e..3b8f40cf6 100644 --- a/src/mux_quic.c +++ b/src/mux_quic.c @@ -1813,7 +1813,7 @@ void qcc_abort_stream_read(struct qcs *qcs) TRACE_ENTER(QMUX_EV_QCC_NEW, qcc->conn, qcs); - if ((qcs->flags & QC_SF_TO_STOP_SENDING) || qcs_is_close_remote(qcs)) + if ((qcs->flags & QC_SF_READ_ABORTED) || qcs_is_close_remote(qcs)) goto end; TRACE_STATE("abort stream read", QMUX_EV_QCS_END, qcc->conn, qcs);