I'm not sure if we're breaking some aliasing rule here, but with gcc 12.2.1 on x86_64 and -flto, the siphash_20b() call in tcp_hash() doesn't see the connection address -- it gets all zeroes instead. Fix this temporarily by disabling optimisations for this tcp_hash(). Signed-off-by: Stefano Brivio <sbrivio(a)redhat.com> --- tcp.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tcp.c b/tcp.c index 81468d9..803c2c4 100644 --- a/tcp.c +++ b/tcp.c @@ -1185,6 +1185,9 @@ static int tcp_hash_match(const struct tcp_tap_conn *conn, #if TCP_HASH_NOINLINE __attribute__((__noinline__)) /* See comment in Makefile */ #endif +__attribute__((optimize("O0"))) /* TODO: with -O2 and -flto on gcc 12.2, + * siphash_20b() doesn't see 'addr', why? + */ static unsigned int tcp_hash(const struct ctx *c, const union inany_addr *addr, in_port_t tap_port, in_port_t sock_port) { -- 2.39.1