MINOR: quic: Do not allocate too much ack ranges
Limit the maximum number of ack ranges to QUIC_MAX_ACK_RANGES(32).
Must be backported to 2.6 and 2.7.
diff --git a/include/haproxy/quic_conn-t.h b/include/haproxy/quic_conn-t.h
index 26fd60b..113cc61 100644
--- a/include/haproxy/quic_conn-t.h
+++ b/include/haproxy/quic_conn-t.h
@@ -321,6 +321,9 @@
uint64_t last;
};
+/* The maximum number of ack ranges to be built in ACK frames */
+#define QUIC_MAX_ACK_RANGES 32
+
/* Structure to maintain a set of ACK ranges to be used to build ACK frames. */
struct quic_arngs {
/* ebtree of ACK ranges organized by their first value. */
diff --git a/src/quic_conn.c b/src/quic_conn.c
index 2992ba0..86fcc1e 100644
--- a/src/quic_conn.c
+++ b/src/quic_conn.c
@@ -4246,6 +4246,16 @@
TRACE_ENTER(QUIC_EV_CONN_RXPKT, qc);
+ if (arngs->sz >= QUIC_MAX_ACK_RANGES) {
+ struct eb64_node *last;
+
+ last = eb64_last(&arngs->root);
+ BUG_ON(last == NULL);
+ eb64_delete(last);
+ pool_free(pool_head_quic_arng, last);
+ arngs->sz--;
+ }
+
new_ar = pool_alloc(pool_head_quic_arng);
if (!new_ar) {
TRACE_ERROR("ack range allocation failed", QUIC_EV_CONN_RXPKT, qc);