diff options
author | David Gibson <david@gibson.dropbear.id.au> | 2023-12-07 16:53:50 +1100 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2023-12-27 19:29:45 +0100 |
commit | 89fcb563fc63229aeac374a0aed057e467ba7f0a (patch) | |
tree | 061a138081ab1c6704ab9650029ee5918213706c /tcp.c | |
parent | a672705e4d8441b44b7523dd8228cfd9ebfb2df9 (diff) | |
download | passt-89fcb563fc63229aeac374a0aed057e467ba7f0a.tar passt-89fcb563fc63229aeac374a0aed057e467ba7f0a.tar.gz passt-89fcb563fc63229aeac374a0aed057e467ba7f0a.tar.bz2 passt-89fcb563fc63229aeac374a0aed057e467ba7f0a.tar.lz passt-89fcb563fc63229aeac374a0aed057e467ba7f0a.tar.xz passt-89fcb563fc63229aeac374a0aed057e467ba7f0a.tar.zst passt-89fcb563fc63229aeac374a0aed057e467ba7f0a.zip |
tcp: Fix conceptually incorrect byte-order switch in tcp_tap_handler()
tcp_hash_lookup() expects the port numbers in host order, but the TCP
header, of course, has them in network order, so we need to switch them.
However we call htons() (host to network) instead of ntohs() (network to
host). This works because those do the same thing in practice (they only
wouldn't on very strange theoretical platforms which are neither big nor
little endian).
But, having this the "wrong" way around is misleading, so switch it around.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'tcp.c')
-rw-r--r-- | tcp.c | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -2533,7 +2533,7 @@ int tcp_tap_handler(struct ctx *c, uint8_t pif, int af, optlen = MIN(optlen, ((1UL << 4) /* from doff width */ - 6) * 4UL); opts = packet_get(p, idx, sizeof(*th), optlen, NULL); - conn = tcp_hash_lookup(c, af, daddr, htons(th->source), htons(th->dest)); + conn = tcp_hash_lookup(c, af, daddr, ntohs(th->source), ntohs(th->dest)); /* New connection from tap */ if (!conn) { |