From 4de37151c9e5f4d65d8563336159084d393d1bd4 Mon Sep 17 00:00:00 2001 From: Stefano Brivio Date: Wed, 13 Jul 2022 05:22:25 +0200 Subject: [PATCH] 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 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 --- conf.c | 4 ++-- 1 file 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 ||