]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
networkd: refuse IPv6 RADV prefixes that lack Prefix= setting
authorLennart Poettering <lennart@poettering.net>
Fri, 30 Nov 2018 18:34:17 +0000 (19:34 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 30 Nov 2018 21:19:28 +0000 (22:19 +0100)
Fixes: #9589
src/libsystemd-network/sd-radv.c
src/network/networkd-radv.c

index fe458bcaa625d3dfd086054ea518324aff804888..098e01fb82527356c6fb5bfecccc1a47cea06353 100644 (file)
@@ -503,6 +503,10 @@ _public_ int sd_radv_add_prefix(sd_radv *ra, sd_radv_prefix *p, int dynamic) {
         if (!p)
                 return -EINVAL;
 
+        /* Refuse prefixes that don't have a prefix set */
+        if (IN6_IS_ADDR_UNSPECIFIED(&p->opt.in6_addr))
+                return -ENOEXEC;
+
         LIST_FOREACH(prefix, cur, ra->prefixes) {
 
                 r = in_addr_prefix_intersect(AF_INET6,
index 346d64953b619e79e6f74612d24a20b792ad62af..92cead052a66797a67bbbc054e38a2e65c02420f 100644 (file)
@@ -494,9 +494,16 @@ int radv_configure(Link *link) {
         if (IN_SET(link->network->router_prefix_delegation,
                    RADV_PREFIX_DELEGATION_STATIC,
                    RADV_PREFIX_DELEGATION_BOTH)) {
+
                 LIST_FOREACH(prefixes, p, link->network->static_prefixes) {
                         r = sd_radv_add_prefix(link->radv, p->radv_prefix, false);
-                        if (r != -EEXIST && r < 0)
+                        if (r == -EEXIST)
+                                continue;
+                        if (r == -ENOEXEC) {
+                                log_link_warning_errno(link, r, "[IPv6Prefix] section configured without Prefix= setting, ignoring section.");
+                                continue;
+                        }
+                        if (r < 0)
                                 return r;
                 }
         }