public inbox for passt-dev@passt.top
 help / color / mirror / code / Atom feed
* [PATCH] udp: Use IP_FREEBIND for flow sockets as well as listening sockets
@ 2025-11-13  1:34 David Gibson
  2025-11-13 22:22 ` Stefano Brivio
  0 siblings, 1 reply; 3+ messages in thread
From: David Gibson @ 2025-11-13  1:34 UTC (permalink / raw)
  To: Stefano Brivio, passt-dev; +Cc: David Gibson

The --freebind option allows pasta to listen on addresses that aren't
registered on the host, which has a number of use cases.  However, we
omitted this option for UDP "flow sockets" which are created once a flow
is started, connect()ed specifically to the peer.  Flow sockets are also
bound, and if the peer has contacted a freebind address, we need
IP_FREEBIND to do so.

Link: https://bugs.passt.top/show_bug.cgi?id=174

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
 util.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

I'm still waiting on confirmation from the reporter that this actually
fixes bug 174.  However, I'm pretty sure this is _a_ correct fix,
whether or not it's a complete fix for the issue seen by the reporter.

diff --git a/util.c b/util.c
index 44c21a3e..ab23463b 100644
--- a/util.c
+++ b/util.c
@@ -67,9 +67,8 @@ int sock_l4_sa(const struct ctx *c, enum epoll_type type,
 		freebind = c->freebind;
 		break;
 	case EPOLL_TYPE_UDP_LISTEN:
-		freebind = c->freebind;
-		/* fallthrough */
 	case EPOLL_TYPE_UDP:
+		freebind = c->freebind;
 		proto = IPPROTO_UDP;
 		socktype = SOCK_DGRAM | SOCK_NONBLOCK;
 		break;
-- 
2.51.1


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2025-11-14  0:47 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-11-13  1:34 [PATCH] udp: Use IP_FREEBIND for flow sockets as well as listening sockets David Gibson
2025-11-13 22:22 ` Stefano Brivio
2025-11-14  0:46   ` David Gibson

Code repositories for project(s) associated with this public inbox

	https://passt.top/passt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for IMAP folder(s).