X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/7a5c4fb6100582e01df8c7fc99f9381de14071c3..51a470b91366db5d36eb11feb24cfcdb2f7a5d3e:/print-icmp.c diff --git a/print-icmp.c b/print-icmp.c index c77c3a4f..124fc05d 100644 --- a/print-icmp.c +++ b/print-icmp.c @@ -849,11 +849,27 @@ icmp_print(netdissect_options *ndo, const u_char *bp, u_int plen, const u_char * offset += 4; } if (name_flag) { + uint8_t inft_name_length_field; + ifname_subobj = (const struct icmp_interface_identification_ifname_subobject_t *) offset; - ND_PRINT("\n\t\t Interface Name: %.*s", - GET_U_1(ifname_subobj->length), - ifname_subobj->if_name); - offset += 1 + GET_U_1(ifname_subobj->length); + inft_name_length_field = GET_U_1(ifname_subobj->length); + ND_PRINT("\n\t\t Interface Name"); + if (inft_name_length_field % 4 != 0) { + ND_PRINT(" [length %u != N x 4]", inft_name_length_field); + nd_print_invalid(ndo); + offset += inft_name_length_field; + break; + } + if (inft_name_length_field > 64) { + ND_PRINT(" [length %u > 64]", inft_name_length_field); + nd_print_invalid(ndo); + offset += inft_name_length_field; + break; + } + ND_PRINT(", length %u: ", inft_name_length_field); + nd_printjnp(ndo, ifname_subobj->if_name, + inft_name_length_field - 1); + offset += inft_name_length_field; } if (mtu_flag) { ND_PRINT("\n\t\t MTU: %u", GET_BE_U_4(offset));