aboutgitcodebugslistschat
path: root/tap.c
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2023-05-16 10:36:11 +1000
committerStefano Brivio <sbrivio@redhat.com>2023-05-17 18:50:34 +0200
commit25f1d1a84f459fe197508b07fc7cdb858d7468ee (patch)
tree133b05f5cdda7700413770b5edc50c40bb632f4d /tap.c
parent96f8d55c4f5093fa59c168361c0428b53b6d2d06 (diff)
downloadpasst-25f1d1a84f459fe197508b07fc7cdb858d7468ee.tar
passt-25f1d1a84f459fe197508b07fc7cdb858d7468ee.tar.gz
passt-25f1d1a84f459fe197508b07fc7cdb858d7468ee.tar.bz2
passt-25f1d1a84f459fe197508b07fc7cdb858d7468ee.tar.lz
passt-25f1d1a84f459fe197508b07fc7cdb858d7468ee.tar.xz
passt-25f1d1a84f459fe197508b07fc7cdb858d7468ee.tar.zst
passt-25f1d1a84f459fe197508b07fc7cdb858d7468ee.zip
tap: Don't update ip6.addr_seen to ::
When we receive packets from the tap side, we update the addr_seen fields to reflect the last known address of the guest or ns. For ip4.addr_seen we, sensibly, only update if the address we've just seen isn't 0 (0.0.0.0). This case can occur during early DHCP transactions. We have no equivalent case for IPv6. We're less likely to hit this, because DHCPv6 uses link-local addresses, however we can see an source address of :: with certain multicast operations. This can bite us if we try to make an incoming connection very early after starting pasta with --config-net: we may have only seen some of those multicast packets, updated addr_seen to :: and not had any "real" packets to update it to a global address. I've seen this with some of the avocado test conversions. In any case, it can never make sense to update addr_seen to ::, so explicitly exclude that case. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'tap.c')
-rw-r--r--tap.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/tap.c b/tap.c
index faa4e26..c0b7f33 100644
--- a/tap.c
+++ b/tap.c
@@ -739,7 +739,7 @@ resume:
if (IN6_IS_ADDR_UNSPECIFIED(&c->ip6.addr_seen)) {
c->ip6.addr_seen = *saddr;
}
- } else {
+ } else if (!IN6_IS_ADDR_UNSPECIFIED(saddr)){
c->ip6.addr_seen = *saddr;
}