mirror of
https://github.com/haproxy/haproxy.git
synced 2026-05-25 18:52:21 -04:00
BUG/MINOR: quic: fix ODCID lookup from derived value
Some checks failed
Contrib / admin/halog/ (push) Has been cancelled
Contrib / dev/flags/ (push) Has been cancelled
Contrib / dev/haring/ (push) Has been cancelled
Contrib / dev/hpack/ (push) Has been cancelled
Contrib / dev/poll/ (push) Has been cancelled
VTest / Generate Build Matrix (push) Has been cancelled
Windows / Windows, gcc, all features (push) Has been cancelled
VTest / (push) Has been cancelled
Some checks failed
Contrib / admin/halog/ (push) Has been cancelled
Contrib / dev/flags/ (push) Has been cancelled
Contrib / dev/haring/ (push) Has been cancelled
Contrib / dev/hpack/ (push) Has been cancelled
Contrib / dev/poll/ (push) Has been cancelled
VTest / Generate Build Matrix (push) Has been cancelled
Windows / Windows, gcc, all features (push) Has been cancelled
VTest / (push) Has been cancelled
In haproxy, when an Initial packet is received, a new connection may be created and a DCID must be attributed. This CID is derived from the original DCID used by the client in its first packet. This is an optimization to avoid storing two CIDs values in the CID tree. On CID lookup, if the DCID used is not found, derivation is performed again. This should permit to retrieve the DCID node. However, this operation is not performed as expected in quic_get_cid_tid(), as the wrong value is used on the second lookup. Fix this function by using derive CID for it. Note that retrieve_qc_conn_from_cid() performs the same lookup but the bug was not present there. The impact of this bug is relatively low as most clients send a single Initial packet. Even in case of multiple packets in a single datagram, this does not cause any issue as the current thread is assigned as default. This should be backported up to 2.8.
This commit is contained in:
parent
04b9215a2e
commit
7cab3a3c3a
1 changed files with 1 additions and 1 deletions
|
|
@ -378,7 +378,7 @@ int quic_get_cid_tid(const unsigned char *cid, size_t cid_len,
|
|||
|
||||
tree = &quic_fe_cid_trees[quic_cid_tree_idx(&derive_cid)];
|
||||
HA_RWLOCK_RDLOCK(QC_CID_LOCK, &tree->lock);
|
||||
node = ebmb_lookup(&tree->root, cid, cid_len);
|
||||
node = ebmb_lookup(&tree->root, derive_cid.data, derive_cid.len);
|
||||
if (node) {
|
||||
conn_id = ebmb_entry(node, struct quic_connection_id, node);
|
||||
cid_tid = HA_ATOMIC_LOAD(&conn_id->tid);
|
||||
|
|
|
|||
Loading…
Reference in a new issue