]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: quic-be: CC buffer released from wrong pool
authorFrederic Lecaille <flecaille@haproxy.com>
Thu, 17 Jul 2025 09:27:59 +0000 (11:27 +0200)
committerFrederic Lecaille <flecaille@haproxy.com>
Thu, 17 Jul 2025 09:48:41 +0000 (11:48 +0200)
The "connection close state" TX buffer is used to build the datagram with
basically a CONNECTION_CLOSE frame to notify the peer about the connection
closure. It allows the quic_conn memory release and its replacement by a lighter
quic_cc_conn struct.

For the QUIC backend, there is a dedicated pool to build such datagrams from
bigger TX buffers. But from quic_conn_release(), this is the pool dedicated
to the QUIC frontends which was used to release the QUIC backend TX buffers.

This patch simply adds a test about the target of the connection to release
the "connection close state" TX buffers from the correct pool.

No backport needed.

src/quic_conn.c

index e8cf8d5f69db36106d6d672bff258ee2ce9ad253..cd5f451e7a3a45166c56008fd141b1675eccf5b0 100644 (file)
@@ -1519,7 +1519,10 @@ int quic_conn_release(struct quic_conn *qc)
                free_quic_conn_cids(qc);
                pool_free(pool_head_quic_cids, qc->cids);
                qc->cids = NULL;
-               pool_free(pool_head_quic_cc_buf, qc->tx.cc_buf_area);
+               if (objt_listener(qc->target))
+                       pool_free(pool_head_quic_cc_buf, qc->tx.cc_buf_area);
+               else
+                       pool_free(pool_head_quic_be_cc_buf, qc->tx.cc_buf_area);
                qc->tx.cc_buf_area = NULL;
                ret = 1;
        }