]> The Tcpdump Group git mirrors - tcpdump/commitdiff
sFlow: Add a length check
authorFrancois-Xavier Le Bail <[email protected]>
Sat, 3 Aug 2019 08:44:53 +0000 (10:44 +0200)
committerFrancois-Xavier Le Bail <[email protected]>
Sat, 3 Aug 2019 18:47:12 +0000 (20:47 +0200)
(backported from commit 09822d484b0f26d197a1ea8fdf81ca6e0d698634)

print-sflow.c

index 37a41b529cd322194505772ec1e3afdec0d2b7d6..41828d4206ec6d8ece9c72e39d3f886ddf52ef9f 100644 (file)
@@ -881,6 +881,14 @@ sflow_print(netdissect_options *ndo,
     tptr = pptr;
     tlen = len;
     sflow_datagram = (const struct sflow_datagram_t *)pptr;
+    if (len < sizeof(struct sflow_datagram_t)) {
+        ND_TCHECK(sflow_datagram->version);
+        ND_PRINT((ndo, "sFlowv%u", EXTRACT_32BITS(sflow_datagram->version)));
+        ND_PRINT((ndo, " [length %u < %" PRIsize "]",
+                  len, sizeof(struct sflow_datagram_t)));
+        ND_PRINT((ndo, " (invalid)"));
+        return;
+    }
     ND_TCHECK(*sflow_datagram);
 
     /*