Browse Source

interface-ip: clear host bits of the device prefix

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 <dxld@darkboxed.org>
Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
Hans Dedecker 3 years ago
parent
commit
645ceed0ed
1 changed files with 5 additions and 1 deletions
  1. 5 1
      interface-ip.c

+ 5 - 1
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;