summaryrefslogtreecommitdiff
path: root/print-null.c
diff options
context:
space:
mode:
authorFrancois-Xavier Le Bail <devel.fx.lebail@orange.fr>2018-02-12 11:34:28 +0100
committerFrancois-Xavier Le Bail <devel.fx.lebail@orange.fr>2018-02-12 11:37:50 +0100
commit09e85c97c83e87fd5cb0510b351b9d3fe328de78 (patch)
tree97e6655908da9baa2019bd04a4cf81a411236210 /print-null.c
parent0d35fd46a18909afce7dd9cf8041165d769e97d4 (diff)
downloadtcpdump-09e85c97c83e87fd5cb0510b351b9d3fe328de78.tar.gz
NULL/LOOP: Add a bounds check
Moreover: Use uint32_t type for family (32-bit integer). Add and use tstr[].
Diffstat (limited to 'print-null.c')
-rw-r--r--print-null.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/print-null.c b/print-null.c
index 874521e2..f1067ff5 100644
--- a/print-null.c
+++ b/print-null.c
@@ -30,8 +30,11 @@
#include <string.h>
#include "netdissect.h"
+#include "extract.h"
#include "af.h"
+static const char tstr[] = " [|null]";
+
/*
* The DLT_NULL packet header is 4 bytes long. It contains a host-byte-order
* 32-bit integer that specifies the family, e.g. AF_INET.
@@ -77,13 +80,12 @@ null_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char
{
u_int length = h->len;
u_int caplen = h->caplen;
- u_int family;
+ uint32_t family;
- if (caplen < NULL_HDRLEN) {
- ND_PRINT("[|null]");
- return (NULL_HDRLEN);
- }
+ if (caplen < NULL_HDRLEN)
+ goto trunc;
+ ND_TCHECK_4(p);
memcpy((char *)&family, (const char *)p, sizeof(family));
/*
@@ -137,6 +139,9 @@ null_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char
}
return (NULL_HDRLEN);
+trunc:
+ ND_PRINT("%s", tstr);
+ return (NULL_HDRLEN);
}
/*