bmf: check minimumLength against buffer size
authorFerry Huberts <ferry.huberts@pelagic.nl>
Mon, 19 Nov 2012 07:45:47 +0000 (08:45 +0100)
committerFerry Huberts <ferry.huberts@pelagic.nl>
Mon, 19 Nov 2012 07:46:01 +0000 (08:46 +0100)
minimumLength includes headerLeangth, but is larger and the most
accurate value we can use.

Signed-off-by: Ferry Huberts <ferry.huberts@pelagic.nl>
lib/bmf/src/Bmf.c

index 5d5964b..9330763 100644 (file)
@@ -1005,16 +1005,16 @@ BMF_handle_listeningFd(int skfd, void *data, unsigned int flags __attribute__ ((
    * not) be 4 (bytes) larger than the value returned on a non-VLAN interface, for
    * the same ethernet frame. */
   headerLength = GetIpHeaderLength(rxBuffer);
-  if (headerLength >= BMF_BUFFER_SIZE) {
-    olsr_printf(1, "%s: IP header pretends to have a length of %u\n",
-        PLUGIN_NAME, headerLength);
-    return;
-  }
   minimumLength =
     headerLength +
     sizeof(struct udphdr) +
     ENCAP_HDR_LEN +
     sizeof(struct ip);
+  if (minimumLength > BMF_BUFFER_SIZE) {
+    olsr_printf(1, "%s: IP header length %u is too large\n",
+        PLUGIN_NAME, headerLength);
+    return;
+  }
   if (nBytes < minimumLength)
   {
     olsr_printf(