X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/d9740d6f4c1b81bd431c1d195ae9d4623fe535ef..b51a0dafc7861eb31d21524ec067d7c529a664b8:/print-udp.c diff --git a/print-udp.c b/print-udp.c index b315f1e7..d5891de6 100644 --- a/print-udp.c +++ b/print-udp.c @@ -369,10 +369,7 @@ udp_print(netdissect_options *ndo, const u_char *bp, u_int length, if (ndo->ndo_packettype != PT_RPC) udpipaddr_print(ndo, ip, sport, dport); - if (length < sizeof(struct udphdr)) { - ND_PRINT("undersized-udp %u", length); - goto invalid; - } + ND_LCHECKMSG_ZU(length, sizeof(struct udphdr), "undersized-udp"); ulen = GET_BE_U_2(up->uh_ulen); udp_sum = GET_BE_U_2(up->uh_sum); /* @@ -382,10 +379,7 @@ udp_print(netdissect_options *ndo, const u_char *bp, u_int length, */ if (ulen == 0 && length > 65535) ulen = length; - if (ulen < sizeof(struct udphdr)) { - ND_PRINT("undersized-udplength %u", ulen); - goto invalid; - } + ND_LCHECKMSG_ZU(ulen, sizeof(struct udphdr), "undersized-udplength"); ulen -= sizeof(struct udphdr); length -= sizeof(struct udphdr); if (ulen < length) @@ -469,6 +463,9 @@ udp_print(netdissect_options *ndo, const u_char *bp, u_int length, /* over_tcp: FALSE, is_mdns: FALSE */ domain_print(ndo, cp, length, FALSE, FALSE); break; + case PT_QUIC: + quic_print(ndo, cp, length); + break; } return; } @@ -630,8 +627,11 @@ udp_print(netdissect_options *ndo, const u_char *bp, u_int length, else if (dport == BFD_CONTROL_PORT || dport == BFD_MULTIHOP_PORT || dport == BFD_LAG_PORT || + dport == SBFD_PORT || dport == BFD_ECHO_PORT ) bfd_print(ndo, cp, length, dport); + else if (sport == SBFD_PORT) + bfd_print(ndo, cp, length, sport); else if (IS_SRC_OR_DST_PORT(LMP_PORT)) lmp_print(ndo, cp, length); else if (IS_SRC_OR_DST_PORT(VQP_PORT)) @@ -672,6 +672,9 @@ udp_print(netdissect_options *ndo, const u_char *bp, u_int length, ptp_print(ndo, cp, length); } else if (IS_SRC_OR_DST_PORT(SOMEIP_PORT)) someip_print(ndo, cp, length); + else if (IS_SRC_OR_DST_PORT(HTTPS_PORT) && + quic_detect(ndo, cp, length)) + quic_print(ndo, cp, length); else { if (ulen > length && !fragmented) ND_PRINT("UDP, bad length %u > %u",