Project

General

Profile

Bug #851 ยป defrag-hash.c.diff

Mark Solaris, 07/06/2013 12:17 AM

View differences:

suricata-1.4.3/src/defrag-hash.c Sat Jul 6 14:57:57 2013
typedef struct DefragHashKey4_ {
union {
struct {
uint32_t src, dst;
uint32_t id;
};
uint32_t dhk4src, dhk4dst;
uint32_t dhk4id;
} dhk4address;
uint32_t u32[3];
};
} DefragHashKey4;
......
typedef struct DefragHashKey6_ {
union {
struct {
uint32_t src[4], dst[4];
uint32_t id;
};
uint32_t dhk6src[4], dhk6dst[4];
uint32_t dhk6id;
} dhk6address;
uint32_t u32[9];
};
} DefragHashKey6;
......
uint32_t key;
if (p->ip4h != NULL) {
DefragHashKey4 dhk;
DefragHashKey4 dhk4;
if (p->src.addr_data32[0] > p->dst.addr_data32[0]) {
dhk.src = p->src.addr_data32[0];
dhk.dst = p->dst.addr_data32[0];
dhk4.dhk4address.dhk4src = (uint32_t) p->src.addr_data32[0];
dhk4.dhk4address.dhk4dst = (uint32_t) p->dst.addr_data32[0];
} else {
dhk.src = p->dst.addr_data32[0];
dhk.dst = p->src.addr_data32[0];
dhk4.dhk4address.dhk4src = p->dst.addr_data32[0];
dhk4.dhk4address.dhk4dst = p->src.addr_data32[0];
}
dhk.id = (uint32_t)IPV4_GET_IPID(p);
dhk4.dhk4address.dhk4id = (uint32_t)IPV4_GET_IPID(p);
uint32_t hash = hashword(dhk.u32, 3, defrag_config.hash_rand);
uint32_t hash = hashword(dhk4.u32, 3, defrag_config.hash_rand);
key = hash % defrag_config.hash_size;
} else if (p->ip6h != NULL) {
DefragHashKey6 dhk;
DefragHashKey6 dhk6;
if (DefragHashRawAddressIPv6GtU32(p->src.addr_data32, p->dst.addr_data32)) {
dhk.src[0] = p->src.addr_data32[0];
dhk.src[1] = p->src.addr_data32[1];
dhk.src[2] = p->src.addr_data32[2];
dhk.src[3] = p->src.addr_data32[3];
dhk.dst[0] = p->dst.addr_data32[0];
dhk.dst[1] = p->dst.addr_data32[1];
dhk.dst[2] = p->dst.addr_data32[2];
dhk.dst[3] = p->dst.addr_data32[3];
dhk6.dhk6address.dhk6src[0] = p->src.addr_data32[0];
dhk6.dhk6address.dhk6src[1] = p->src.addr_data32[1];
dhk6.dhk6address.dhk6src[2] = p->src.addr_data32[2];
dhk6.dhk6address.dhk6src[3] = p->src.addr_data32[3];
dhk6.dhk6address.dhk6dst[0] = p->dst.addr_data32[0];
dhk6.dhk6address.dhk6dst[1] = p->dst.addr_data32[1];
dhk6.dhk6address.dhk6dst[2] = p->dst.addr_data32[2];
dhk6.dhk6address.dhk6dst[3] = p->dst.addr_data32[3];
} else {
dhk.src[0] = p->dst.addr_data32[0];
dhk.src[1] = p->dst.addr_data32[1];
dhk.src[2] = p->dst.addr_data32[2];
dhk.src[3] = p->dst.addr_data32[3];
dhk.dst[0] = p->src.addr_data32[0];
dhk.dst[1] = p->src.addr_data32[1];
dhk.dst[2] = p->src.addr_data32[2];
dhk.dst[3] = p->src.addr_data32[3];
dhk6.dhk6address.dhk6src[0] = p->dst.addr_data32[0];
dhk6.dhk6address.dhk6src[1] = p->dst.addr_data32[1];
dhk6.dhk6address.dhk6src[2] = p->dst.addr_data32[2];
dhk6.dhk6address.dhk6src[3] = p->dst.addr_data32[3];
dhk6.dhk6address.dhk6dst[0] = p->src.addr_data32[0];
dhk6.dhk6address.dhk6dst[1] = p->src.addr_data32[1];
dhk6.dhk6address.dhk6dst[2] = p->src.addr_data32[2];
dhk6.dhk6address.dhk6dst[3] = p->src.addr_data32[3];
}
dhk.id = IPV6_EXTHDR_GET_FH_ID(p);
dhk6.dhk6address.dhk6id = IPV6_EXTHDR_GET_FH_ID(p);
uint32_t hash = hashword(dhk.u32, 9, defrag_config.hash_rand);
uint32_t hash = hashword(dhk6.u32, 9, defrag_config.hash_rand);
key = hash % defrag_config.hash_size;
} else
key = 0;
    (1-1/1)