]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: quic: add 2 BUG_ON() on datagram dispatch
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Mon, 1 Jul 2024 08:15:58 +0000 (10:15 +0200)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Wed, 3 Jul 2024 13:02:40 +0000 (15:02 +0200)
QUIC datagram dispatch is an error prone operation as it must always
ensure the correct thread is used before accessing to the recipient
quic_conn instance. Strengthen this code part by adding two BUG_ON_HOT()
to ensure thread safety.

src/quic_rx.c

index 05a0c19c2b1d85732256192e19738f1da100293d..abf89f1d776e1568ee926fdeb2ec6193d6d78b29 100644 (file)
@@ -1571,6 +1571,9 @@ static struct quic_conn *quic_rx_pkt_retrieve_conn(struct quic_rx_packet *pkt,
 
        qc = retrieve_qc_conn_from_cid(pkt, &dgram->saddr, new_tid);
 
+       /* quic_conn must be set to NULL if bind on another thread. */
+       BUG_ON_HOT(qc && *new_tid != -1);
+
        /* If connection already created or rebinded on another thread. */
        if (!qc && *new_tid != -1 && tid != *new_tid)
                goto out;
@@ -2161,6 +2164,10 @@ int quic_dgram_parse(struct quic_dgram *dgram, struct quic_conn *from_qc,
                        dgram->qc = qc;
                }
 
+               /* Ensure quic_conn access only occurs on its attached thread. */
+               BUG_ON_HOT(((struct quic_connection_id *)
+                              eb64_entry(eb64_first(qc->cids), struct quic_connection_id, seq_num))->tid != tid);
+
                /* Ensure thread connection migration is finalized ASAP. */
                if (qc->flags & QUIC_FL_CONN_AFFINITY_CHANGED)
                        qc_finalize_affinity_rebind(qc);