aboutgitcodebugslistschat
path: root/contrib
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2025-04-10 17:16:40 +1000
committerStefano Brivio <sbrivio@redhat.com>2025-04-10 19:46:16 +0200
commit59cc89f4cc018988428637d97745cc4c919126cb (patch)
tree12688ff4bf049d5151bd86b12098680b7a6b11d5 /contrib
parent695c62396eb3f4627c1114ce444394e3ba34373a (diff)
downloadpasst-59cc89f4cc018988428637d97745cc4c919126cb.tar
passt-59cc89f4cc018988428637d97745cc4c919126cb.tar.gz
passt-59cc89f4cc018988428637d97745cc4c919126cb.tar.bz2
passt-59cc89f4cc018988428637d97745cc4c919126cb.tar.lz
passt-59cc89f4cc018988428637d97745cc4c919126cb.tar.xz
passt-59cc89f4cc018988428637d97745cc4c919126cb.tar.zst
passt-59cc89f4cc018988428637d97745cc4c919126cb.zip
udp, udp_flow: Track our specific address on socket interfaces
So far for UDP flows (like TCP connections) we didn't record our address (oaddr) in the flow table entry for socket based pifs. That's because we didn't have that information when a flow was initiated by a datagram coming to a "listening" socket with 0.0.0.0 or :: address. Even when we did have the information, we didn't record it, to simplify address matching on lookups. This meant that in some circumstances we could send replies on a UDP flow from a different address than the originating request came to, which is surprising and breaks certain setups. We now have code in udp_peek_addr() which does determine our address for incoming UDP datagrams. We can use that information to properly populate oaddr in the flow table for flow initiated from a socket. In order to be able to consistently match datagrams to flows, we must *always* have a specific oaddr, not an unspecified address (that's how the flow hash table works). So, we also need to fill in oaddr correctly for flows we initiate *to* sockets. Our forwarding logic doesn't specify oaddr here, letting the kernel decide based on the routing table. In this case we need to call getsockname() after connect()ing the socket to find which local address the kernel picked. This adds getsockname() to our seccomp profile for all variants. Link: https://bugs.passt.top/show_bug.cgi?id=99 Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'contrib')
0 files changed, 0 insertions, 0 deletions