diff options
author | David Gibson <david@gibson.dropbear.id.au> | 2023-05-16 10:36:11 +1000 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2023-05-17 18:50:34 +0200 |
commit | 25f1d1a84f459fe197508b07fc7cdb858d7468ee (patch) | |
tree | 133b05f5cdda7700413770b5edc50c40bb632f4d | |
parent | 96f8d55c4f5093fa59c168361c0428b53b6d2d06 (diff) | |
download | passt-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>
-rw-r--r-- | tap.c | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -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; } |