]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
host: improve compare logic 5855/head
authorVictor Julien <victor@inliniac.net>
Sat, 13 Feb 2021 16:10:15 +0000 (17:10 +0100)
committerVictor Julien <victor@inliniac.net>
Sat, 13 Feb 2021 16:10:19 +0000 (17:10 +0100)
The old compare macro would compare all bytes of an address, even
when for IPv4 addresses the additional bytes were not in use. This
made the logic vulnerable to mistakes like in issue #4280.

src/host.c

index 671faf1b11df991fa609a77eac5879a575ce8357..5480d1b4501b025995a02e881d5c43150812d98d 100644 (file)
@@ -402,14 +402,17 @@ static inline uint32_t HostGetKey(Address *a)
     return key;
 }
 
-/* Since two or more hosts can have the same hash key, we need to compare
- * the flow with the current flow key. */
-#define CMP_HOST(h,a) \
-    (CMP_ADDR(&(h)->a, (a)))
-
 static inline int HostCompare(Host *h, Address *a)
 {
-    return CMP_HOST(h, a);
+    if (h->a.family == a->family) {
+        switch (a->family) {
+            case AF_INET:
+                return (h->a.addr_data32[0] == a->addr_data32[0]);
+            case AF_INET6:
+                return CMP_ADDR(&h->a, a);
+        }
+    }
+    return 0;
 }
 
 /**