X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/c7fd6445c6c4c1b36183bc043a06a5e17237c49f..HEAD:/print-rt6.c diff --git a/print-rt6.c b/print-rt6.c index 0478f382..edbcd96d 100644 --- a/print-rt6.c +++ b/print-rt6.c @@ -21,12 +21,11 @@ /* \summary: IPv6 routing header printer */ -#ifdef HAVE_CONFIG_H #include -#endif #include "netdissect-stdinc.h" +#define ND_LONGJMP_FROM_TCHECK #include "netdissect.h" #include "addrtoname.h" #include "extract.h" @@ -67,6 +66,7 @@ srh_tlv_print(netdissect_options *ndo, const u_char *p, u_int bytes_left) case IPV6_SRH_TLV_PADN: ND_ICHECKMSG_U("PadN length", tlv_len, >, 5); /* RFC 8754 */ ND_ICHECKMSG_U("remaining length", bytes_left, <, tlv_len); + ND_TCHECK_LEN(p, tlv_len); p += tlv_len; bytes_left -= tlv_len; break; @@ -79,6 +79,8 @@ srh_tlv_print(netdissect_options *ndo, const u_char *p, u_int bytes_left) p += 2; if (ndo->ndo_vflag) ND_PRINT(", D=%u", reserved >> 15); + if (ndo->ndo_vflag && (reserved & 0x7fff) != 0) + ND_PRINT(", reserved MBZ %u", reserved & 0x7fff); key_id = GET_BE_U_4(p); p += 4; if (ndo->ndo_vflag) @@ -151,7 +153,7 @@ rt6_print(netdissect_options *ndo, const u_char *bp, const u_char *bp2 _U_) } if (len % 2 == 1) { - ND_PRINT(" (invalid length %u)", len); + ND_PRINT(" [length %u]", len); goto invalid; } len >>= 1; @@ -163,7 +165,6 @@ rt6_print(netdissect_options *ndo, const u_char *bp, const u_char *bp2 _U_) /*(*/ ND_PRINT(") "); return((GET_U_1(dp0->ip6r0_len) + 1) << 3); - break; case IPV6_RTHDR_TYPE_4: srh = (const struct ip6_srh *)dp; last_entry = GET_U_1(srh->srh_last_ent); @@ -193,7 +194,6 @@ rt6_print(netdissect_options *ndo, const u_char *bp, const u_char *bp2 _U_) /*(*/ ND_PRINT(") "); return((GET_U_1(srh->srh_len) + 1) << 3); - break; default: ND_PRINT(" (unknown type)"); goto invalid;