From: Lennart Poettering Date: Fri, 30 Nov 2018 18:34:17 +0000 (+0100) Subject: networkd: refuse IPv6 RADV prefixes that lack Prefix= setting X-Git-Tag: v240~166 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=59ea6e57a5249c13f4918b62b3b01c77859eb4ae;p=thirdparty%2Fsystemd.git networkd: refuse IPv6 RADV prefixes that lack Prefix= setting Fixes: #9589 --- diff --git a/src/libsystemd-network/sd-radv.c b/src/libsystemd-network/sd-radv.c index fe458bcaa62..098e01fb825 100644 --- a/src/libsystemd-network/sd-radv.c +++ b/src/libsystemd-network/sd-radv.c @@ -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, diff --git a/src/network/networkd-radv.c b/src/network/networkd-radv.c index 346d64953b6..92cead052a6 100644 --- a/src/network/networkd-radv.c +++ b/src/network/networkd-radv.c @@ -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; } }