aboutgitcodebugslistschat
path: root/conf.c
diff options
context:
space:
mode:
authorStefano Brivio <sbrivio@redhat.com>2022-07-13 05:22:25 +0200
committerStefano Brivio <sbrivio@redhat.com>2022-07-14 01:36:05 +0200
commit4de37151c9e5f4d65d8563336159084d393d1bd4 (patch)
tree054ddd1e9d398981bb35313e173cba046ba6a401 /conf.c
parentf3198c4a06494846597df66ca73d053c977fefc8 (diff)
downloadpasst-4de37151c9e5f4d65d8563336159084d393d1bd4.tar
passt-4de37151c9e5f4d65d8563336159084d393d1bd4.tar.gz
passt-4de37151c9e5f4d65d8563336159084d393d1bd4.tar.bz2
passt-4de37151c9e5f4d65d8563336159084d393d1bd4.tar.lz
passt-4de37151c9e5f4d65d8563336159084d393d1bd4.tar.xz
passt-4de37151c9e5f4d65d8563336159084d393d1bd4.tar.zst
passt-4de37151c9e5f4d65d8563336159084d393d1bd4.zip
conf: Fix initialisation of IPv6 unicast and link-local addresses
In commit 675174d4ba25 ("conf, tap: Split netlink and pasta functions, allow interface configuration"), I broke the initial setting of the observed IPv6 addresses in two ways: - the size copied from the configured addresses corresponds to an IPv4 address, not to an IPv6 address - the observed link-local address is initialised to the configured unicast address, not the link-local one If we haven't seen the guest using some type of addresses yet, we should default to the configured values, hence these initial settings: fix both. This resulted in UDP flows to the guest from a unique local address on the network not working before the guest shows passt a valid address itself, as reported by Alona. Reported-by: Alona Paz <alkaplan@redhat.com> Link: https://bugs.passt.top/show_bug.cgi?id=16 Fixes: 675174d4ba25 ("conf, tap: Split netlink and pasta functions, allow interface configuration") Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'conf.c')
-rw-r--r--conf.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/conf.c b/conf.c
index 13cb5a1..cff71ff 100644
--- a/conf.c
+++ b/conf.c
@@ -589,8 +589,8 @@ static void conf_ip(struct ctx *c)
IN6_IS_ADDR_UNSPECIFIED(&c->addr6) ? &c->addr6 : NULL,
&prefix_len, &c->addr6_ll);
- memcpy(&c->addr6_seen, &c->addr6, sizeof(c->addr4_seen));
- memcpy(&c->addr6_ll_seen, &c->addr6, sizeof(c->addr4_seen));
+ memcpy(&c->addr6_seen, &c->addr6, sizeof(c->addr6));
+ memcpy(&c->addr6_ll_seen, &c->addr6_ll, sizeof(c->addr6_ll));
}
if (!c->gw4 || !c->addr4 ||