From 645ceed0ed706b073edd6a0d5a2eb936208b48c9 Mon Sep 17 00:00:00 2001 From: Hans Dedecker Date: Sun, 9 Aug 2020 22:46:54 +0200 Subject: interface-ip: clear host bits of the device prefix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Clear the host bits of the device prefix in interface_ip_add_device_prefix as interface_set_prefix_address just ORs the calculated assignment part which would lead to an invalid IPv6 address if the host bits are not masked out Suggested-by: Daniel Gröber Signed-off-by: Hans Dedecker --- interface-ip.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'interface-ip.c') diff --git a/interface-ip.c b/interface-ip.c index 2e46f14..f1ed8d3 100644 --- a/interface-ip.c +++ b/interface-ip.c @@ -1270,6 +1270,8 @@ interface_ip_add_device_prefix(struct interface *iface, struct in6_addr *addr, uint8_t length, time_t valid_until, time_t preferred_until, struct in6_addr *excl_addr, uint8_t excl_length, const char *pclass) { + union if_addr a = { .in6 = *addr }; + if (!pclass) pclass = (iface) ? iface->name : "local"; @@ -1277,8 +1279,10 @@ interface_ip_add_device_prefix(struct interface *iface, struct in6_addr *addr, if (!prefix) return NULL; + clear_if_addr(&a, length); + prefix->length = length; - prefix->addr = *addr; + prefix->addr = a.in6; prefix->preferred_until = preferred_until; prefix->valid_until = valid_until; prefix->iface = iface; -- cgit v1.2.1