aboutsummaryrefslogtreecommitdiff
path: root/print-aodv.c
diff options
context:
space:
mode:
Diffstat (limited to 'print-aodv.c')
-rw-r--r--print-aodv.c9
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;