diff options
author | John Thacker <johnthacker@gmail.com> | 2022-08-19 19:35:12 -0400 |
---|---|---|
committer | John Thacker <johnthacker@gmail.com> | 2022-08-19 19:37:41 -0400 |
commit | 346c53b0b21cb959f468bc335a1ba36fcdf13106 (patch) | |
tree | 88aae8cbea8af03cbf2c862c4a551f6d2fa8dba3 /epan | |
parent | d0c8efe8890fb1e45529f784753725caebf71ae8 (diff) |
QUIC: In stateless reset only set from_server if token found
When calling quic_find_stateless_reset_token, only change the
from_server pointer is the reset token is actually found.
Fixes a few cases where a new Initial connection is sent with
client and server reversed. Also fixes an error failing to
dereference a pointer to a boolean.
Diffstat (limited to 'epan')
-rw-r--r-- | epan/dissectors/packet-quic.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/epan/dissectors/packet-quic.c b/epan/dissectors/packet-quic.c index 93d54eb4f9..3481ddf135 100644 --- a/epan/dissectors/packet-quic.c +++ b/epan/dissectors/packet-quic.c @@ -3503,13 +3503,15 @@ quic_find_stateless_reset_token(packet_info *pinfo, tvbuff_t *tvb, gboolean *fro const quic_cid_item_t *cids; if (conn) { - *from_server = conn->server_port == pinfo->srcport && + gboolean conn_from_server; + conn_from_server = conn->server_port == pinfo->srcport && addresses_equal(&conn->server_address, &pinfo->src); - cids = from_server ? &conn->server_cids : &conn->client_cids; + cids = conn_from_server ? &conn->server_cids : &conn->client_cids; while (cids) { const quic_cid_t *cid = &cids->data; if (cid->reset_token_set && !tvb_memeql(tvb, -16, cid->reset_token, 16) ) { + *from_server = conn_from_server; return conn; } cids = cids->next; |