diff options
author | Francois-Xavier Le Bail <devel.fx.lebail@orange.fr> | 2023-05-12 18:29:25 +0200 |
---|---|---|
committer | Francois-Xavier Le Bail <devel.fx.lebail@orange.fr> | 2023-05-12 18:34:04 +0200 |
commit | 57f12d165788e4bc436757102eb83113091ab4be (patch) | |
tree | 86b821a5d8e031aaa847b14418b2c213d33c9de3 | |
parent | a5dc11f9cc4e36dca9aa4f053c8fda4c45fee427 (diff) | |
download | tcpdump-57f12d165788e4bc436757102eb83113091ab4be.tar.gz |
mobile: Modernize packet parsing
Use ND_TCHECK_SIZE() and enable ND_LONGJMP_FROM_TCHECK.
Use ND_ICHECK_U() for length check and add standard "invalid" section.
Use nd_print_protocol().
-rw-r--r-- | print-mobile.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/print-mobile.c b/print-mobile.c index 528da79c..2dc4d77f 100644 --- a/print-mobile.c +++ b/print-mobile.c @@ -44,6 +44,7 @@ #include "netdissect-stdinc.h" +#define ND_LONGJMP_FROM_TCHECK #include "netdissect.h" #include "addrtoname.h" #include "extract.h" @@ -73,11 +74,10 @@ mobile_print(netdissect_options *ndo, const u_char *bp, u_int length) ndo->ndo_protocol = "mobile"; mob = (const struct mobile_ip *)bp; - if (length < MOBILE_SIZE || !ND_TTEST_SIZE(mob)) { - nd_print_trunc(ndo); - return; - } - ND_PRINT("mobile: "); + ND_ICHECK_U(length, <, MOBILE_SIZE); + ND_TCHECK_SIZE(mob); + nd_print_protocol(ndo); + ND_PRINT(": "); proto = GET_BE_U_2(mob->proto); crc = GET_BE_U_2(mob->hcheck); @@ -101,4 +101,7 @@ mobile_print(netdissect_options *ndo, const u_char *bp, u_int length) if (in_cksum(vec, 1)!=0) { ND_PRINT(" (bad checksum %u)", crc); } + return; +invalid: + nd_print_invalid(ndo); } |