diff options
Diffstat (limited to 'print-aodv.c')
| -rw-r--r-- | print-aodv.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/print-aodv.c b/print-aodv.c index 6cd0c9ea1b6d..fe75db863c0b 100644 --- a/print-aodv.c +++ b/print-aodv.c @@ -42,7 +42,9 @@ #include "addrtoname.h" #include "extract.h" - +/* + * RFC 3561 + */ struct aodv_rreq { uint8_t rreq_type; /* AODV message type (1) */ uint8_t rreq_flags; /* various flags */ @@ -178,12 +180,17 @@ aodv_extension(netdissect_options *ndo, { const struct aodv_hello *ah; + ND_TCHECK(*ep); switch (ep->type) { case AODV_EXT_HELLO: ah = (const struct aodv_hello *)(const void *)ep; ND_TCHECK(*ah); if (length < sizeof(struct aodv_hello)) goto trunc; + if (ep->length < 4) { + ND_PRINT((ndo, "\n\text HELLO - bad length %u", ep->length)); + break; + } ND_PRINT((ndo, "\n\text HELLO %ld ms", (unsigned long)EXTRACT_32BITS(&ah->interval))); break; |
