Skip to content

Commit

Permalink
MINOR: quic: add 2 BUG_ON() on datagram dispatch
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
a-denoyelle committed Jul 3, 2024
1 parent 85752cd commit 9655b89
Showing 1 changed file with 7 additions and 0 deletions.
7 changes: 7 additions & 0 deletions src/quic_rx.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit 9655b89

Please sign in to comment.