From e0a487cf6eee7ad201a810635b7b287391f38a5b Mon Sep 17 00:00:00 2001 From: Dmitri Tikhonov Date: Thu, 8 Oct 2020 08:50:20 -0400 Subject: [PATCH] Fix function that checks validity of handshake packets When Initial and 0-RTT packets are coalesced, they can be 1200 *together*. lsquic_is_valid_hs_packet() should use the datagram --- include/lsquic.h | 3 ++- src/liblsquic/lsquic_hspack_valid.c | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/include/lsquic.h b/include/lsquic.h index 6ca426f..3ab1b82 100644 --- a/include/lsquic.h +++ b/include/lsquic.h @@ -1675,7 +1675,8 @@ lsquic_get_h3_alpns (unsigned versions); * been established: it will return incorrect result. */ int -lsquic_is_valid_hs_packet (lsquic_engine_t *, const unsigned char *, size_t); +lsquic_is_valid_hs_packet (lsquic_engine_t *, const unsigned char *, + size_t bufsz, size_t packet_in_sz); /** * Parse cid from packet stored in `buf' and store it to `cid'. Returns 0 diff --git a/src/liblsquic/lsquic_hspack_valid.c b/src/liblsquic/lsquic_hspack_valid.c index a59bfb7..7398d2a 100644 --- a/src/liblsquic/lsquic_hspack_valid.c +++ b/src/liblsquic/lsquic_hspack_valid.c @@ -88,7 +88,7 @@ is_valid_gquic_hs_packet (const unsigned char *buf, size_t bufsz, int lsquic_is_valid_hs_packet (struct lsquic_engine *engine, - const unsigned char *buf, size_t bufsz) + const unsigned char *buf, size_t bufsz, size_t packet_in_sz) { lsquic_ver_tag_t tag; int is_valid; @@ -104,7 +104,7 @@ lsquic_is_valid_hs_packet (struct lsquic_engine *engine, case 0x80|0x00|0x20|0x10|0x08: case 0x80|0x40|0x20|0x10|0x00: case 0x80|0x00|0x20|0x10|0x00: - is_valid = bufsz >= IQUIC_MIN_INIT_PACKET_SZ + is_valid = packet_in_sz >= IQUIC_MIN_INIT_PACKET_SZ && lsquic_is_valid_iquic_hs_packet(buf, bufsz, &tag); break; /* 1X00 XGGG: ID-22 long header */ @@ -122,7 +122,7 @@ lsquic_is_valid_hs_packet (struct lsquic_engine *engine, case 0x80|0x00|0x20|0x00|0x08: case 0x80|0x40|0x20|0x00|0x00: case 0x80|0x00|0x20|0x00|0x00: - is_valid = bufsz >= IQUIC_MIN_INIT_PACKET_SZ + is_valid = packet_in_sz >= IQUIC_MIN_INIT_PACKET_SZ && lsquic_is_valid_ietf_v1_or_Q046plus_hs_packet(buf, bufsz, &tag); break; /* 01XX XGGG: ID-22 short header */