aboutgitcodebugslistschat
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2025-10-31 15:19:30 +1100
committerStefano Brivio <sbrivio@redhat.com>2025-11-01 00:23:09 +0100
commitf6b6118fcabda6d6a89a4a16dfee151ab97f1d7a (patch)
treed5054ae78feda15186f56b5bc88c3c09f647964d
parent81942a2417357ff10b02ccc8275cde2d4d6fbfbe (diff)
downloadpasst-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.c5
-rw-r--r--udp.c6
2 files changed, 0 insertions, 11 deletions
diff --git a/tcp.c b/tcp.c
index c35c1c3..e91c0cf 100644
--- a/tcp.c
+++ b/tcp.c
@@ -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)
diff --git a/udp.c b/udp.c
index 8cff880..9c00950 100644
--- a/udp.c
+++ b/udp.c
@@ -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);