From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: passt.top; dkim=pass (2048-bit key; secure) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.a=rsa-sha256 header.s=202510 header.b=i7IIqa01; dkim-atps=neutral Received: from mail.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3]) by passt.top (Postfix) with ESMTPS id E77915A0653 for ; Fri, 31 Oct 2025 05:19:40 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gibson.dropbear.id.au; s=202510; t=1761884372; bh=I2G8z3GWF0zJS9UeVx5QZGO1ZIEPYlaZalk0uWAP8YQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=i7IIqa01r1o1L4YdzdJ9CMDlAYMmjbbejfKmBYyR34fOIQXUpa2XDtSp5FrXUJ8eE jcLdcN3A30GSJh2RIlRxtFo5aQ0s+kS1qOxKWZXHo0Qv6dEkR+OhFBb3TIDY4D5gN4 fD6OAhpe7/eIb/Mfk3oWlnOCmL3GMNzc3OoUUzOfDyTezPYeI04/MxDiAYjl8Kn3A/ boaVIv6zVwEGCP/MRNDw9hc92WzoI52d9P6hUvuK+1czYBESBVvfaoxOW8LbfQL/0s J3WMuefj8RtDUjygqeaYuQhfGFABcIPHU/Vytq+6Tiq+Me1tTrwXhfPrupd0W1vdhl wwi9xMOJ2km9w== Received: by gandalf.ozlabs.org (Postfix, from userid 1007) id 4cySRm306rz4xH6; Fri, 31 Oct 2025 15:19:32 +1100 (AEDT) From: David Gibson To: passt-dev@passt.top, Stefano Brivio Subject: [PATCH v2 8/8] tcp, udp: Don't exclude ports in {tcp,udp}_port_rebind() Date: Fri, 31 Oct 2025 15:19:30 +1100 Message-ID: <20251031041930.1272259-9-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251031041930.1272259-1-david@gibson.dropbear.id.au> References: <20251031041930.1272259-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Message-ID-Hash: IEB35IR7YERMRJZM6EMGAZVCRIRTKNY7 X-Message-ID-Hash: IEB35IR7YERMRJZM6EMGAZVCRIRTKNY7 X-MailFrom: dgibson@gandalf.ozlabs.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: David Gibson X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: 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 --- tcp.c | 5 ----- udp.c | 6 ------ 2 files changed, 11 deletions(-) diff --git a/tcp.c b/tcp.c index c35c1c3f..e91c0cf5 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 8cff8809..9c009502 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); -- 2.51.0