diff options
| author | David Gibson <david@gibson.dropbear.id.au> | 2025-10-31 15:19:30 +1100 |
|---|---|---|
| committer | Stefano Brivio <sbrivio@redhat.com> | 2025-11-01 00:23:09 +0100 |
| commit | f6b6118fcabda6d6a89a4a16dfee151ab97f1d7a (patch) | |
| tree | d5054ae78feda15186f56b5bc88c3c09f647964d | |
| parent | 81942a2417357ff10b02ccc8275cde2d4d6fbfbe (diff) | |
| download | passt-f6b6118fcabda6d6a89a4a16dfee151ab97f1d7a.tar passt-f6b6118fcabda6d6a89a4a16dfee151ab97f1d7a.tar.gz passt-f6b6118fcabda6d6a89a4a16dfee151ab97f1d7a.tar.bz2 passt-f6b6118fcabda6d6a89a4a16dfee151ab97f1d7a.tar.lz passt-f6b6118fcabda6d6a89a4a16dfee151ab97f1d7a.tar.xz passt-f6b6118fcabda6d6a89a4a16dfee151ab97f1d7a.tar.zst passt-f6b6118fcabda6d6a89a4a16dfee151ab97f1d7a.zip | |
tcp, udp: Don't exclude ports in {tcp,udp}_port_rebind()
To avoid circular forwarding, {tcp,udp}_port_rebind() refuse to listen on
ports that we're already listening on in the reverse direction. This is
redundant, because we already remove such ports from the forward map when
we scan. This was needed previously, because our reverse maps might have
been one cycle out of date, so could be missing a newly appeared port.
We've now rearranged the port scanning code to avoid that, so we don't need
the check in tcp_port_rebind() any more.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
| -rw-r--r-- | tcp.c | 5 | ||||
| -rw-r--r-- | udp.c | 6 |
2 files changed, 0 insertions, 11 deletions
@@ -2832,7 +2832,6 @@ int tcp_init(struct ctx *c) static void tcp_port_rebind(struct ctx *c, bool outbound) { const uint8_t *fmap = outbound ? c->tcp.fwd_out.map : c->tcp.fwd_in.map; - const uint8_t *rmap = outbound ? c->tcp.fwd_in.map : c->tcp.fwd_out.map; int (*socks)[IP_VERSIONS] = outbound ? tcp_sock_ns : tcp_sock_init_ext; unsigned port; @@ -2851,10 +2850,6 @@ static void tcp_port_rebind(struct ctx *c, bool outbound) continue; } - /* Don't loop back our own ports */ - if (bitmap_isset(rmap, port)) - continue; - if ((c->ifi4 && socks[port][V4] == -1) || (c->ifi6 && socks[port][V6] == -1)) { if (outbound) @@ -1204,8 +1204,6 @@ static void udp_port_rebind(struct ctx *c, bool outbound) int (*socks)[NUM_PORTS] = outbound ? udp_splice_ns : udp_splice_init; const uint8_t *fmap = outbound ? c->udp.fwd_out.map : c->udp.fwd_in.map; - const uint8_t *rmap - = outbound ? c->udp.fwd_in.map : c->udp.fwd_out.map; unsigned port; for (port = 0; port < NUM_PORTS; port++) { @@ -1223,10 +1221,6 @@ static void udp_port_rebind(struct ctx *c, bool outbound) continue; } - /* Don't loop back our own ports */ - if (bitmap_isset(rmap, port)) - continue; - if ((c->ifi4 && socks[V4][port] == -1) || (c->ifi6 && socks[V6][port] == -1)) udp_sock_init(c, outbound, NULL, NULL, port); |
