summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrancois-Xavier Le Bail <devel.fx.lebail@orange.fr>2023-05-12 18:29:25 +0200
committerFrancois-Xavier Le Bail <devel.fx.lebail@orange.fr>2023-05-12 18:34:04 +0200
commit57f12d165788e4bc436757102eb83113091ab4be (patch)
tree86b821a5d8e031aaa847b14418b2c213d33c9de3
parenta5dc11f9cc4e36dca9aa4f053c8fda4c45fee427 (diff)
downloadtcpdump-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.c13
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);
}