host: improve compare logic

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.
pull/5855/head
Victor Julien 6 years ago
parent 7b03e6837e
commit 6bfc5afa23

@ -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;
}
/**

Loading…
Cancel
Save