From bfdf145859d80dc3357f6f67e96c8cbbe8280804 Mon Sep 17 00:00:00 2001 From: Amaury Denoyelle Date: Mon, 1 Jul 2024 15:36:33 +0200 Subject: [PATCH] MINOR: quic: ensure quic_conn is never removed on thread affinity rebind On accept, quic_conn instance is migrated from its original thread to a new one. This operation is conducted in two steps, on the original than the new thread instance. During the interval, quic_conn is artificially rendered inactive. It must never be accessed nor removed until migration is completed via qc_finalize_affinity_rebind(). This new BUG_ON() will enforce that removal is never conducted until migration is completed. --- src/quic_conn.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/quic_conn.c b/src/quic_conn.c index 595dcf044..46c74d943 100644 --- a/src/quic_conn.c +++ b/src/quic_conn.c @@ -1314,6 +1314,9 @@ void quic_conn_release(struct quic_conn *qc) if (!qc) goto leave; + /* Must not delete a quic_conn if thread affinity rebind in progress. */ + BUG_ON(qc->flags & QUIC_FL_CONN_AFFINITY_CHANGED); + /* We must not free the quic-conn if the MUX is still allocated. */ BUG_ON(qc->mux_state == QC_MUX_READY);