]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: quic: add missing lock on cid tree
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Mon, 13 Dec 2021 16:07:55 +0000 (17:07 +0100)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Fri, 17 Dec 2021 09:59:36 +0000 (10:59 +0100)
All operation on the ODCID/DCID trees must be conducted under a
read-write lock. Add a missing read-lock on the lookup operation inside
listener handler.

src/xprt_quic.c

index 6e30a363dbe57983b0c052c1f70618b6cda50d39..accadb75b364800f15d5d6edac1d0d0b1b205525 100644 (file)
@@ -4115,14 +4115,19 @@ static ssize_t qc_lstnr_pkt_rcv(unsigned char **buf, const unsigned char *end,
                }
 
                cids = &l->rx.cids;
+
+               HA_RWLOCK_RDLOCK(QUIC_LOCK, &l->rx.cids_lock);
                node = ebmb_lookup(cids, *buf, QUIC_CID_LEN);
                if (!node) {
+                       HA_RWLOCK_RDUNLOCK(QUIC_LOCK, &l->rx.cids_lock);
                        TRACE_PROTO("Packet dropped", QUIC_EV_CONN_LPKT);
                        goto err;
                }
 
                cid = ebmb_entry(node, struct quic_connection_id, node);
                qc = cid->qc;
+               HA_RWLOCK_RDUNLOCK(QUIC_LOCK, &l->rx.cids_lock);
+
                if (HA_ATOMIC_LOAD(&qc->conn))
                        conn_ctx = HA_ATOMIC_LOAD(&qc->conn->xprt_ctx);
                *buf += QUIC_CID_LEN;