summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--man/systemd.network.xml2
-rw-r--r--src/network/networkd-ndisc.c18
-rw-r--r--src/network/networkd-ndisc.h2
-rw-r--r--test/fuzz/fuzz-network-parser/oss-fuzz-20548bin0 -> 26 bytes
-rw-r--r--test/test-network/conf/ipv6-prefix-veth-token-static.network (renamed from test/test-network/conf/ipv6-prefix-veth-token-eui64.network)0
-rwxr-xr-xtest/test-network/systemd-networkd-tests.py6
6 files changed, 17 insertions, 11 deletions
diff --git a/man/systemd.network.xml b/man/systemd.network.xml
index 6a2dd0d04c..d61e3472c1 100644
--- a/man/systemd.network.xml
+++ b/man/systemd.network.xml
@@ -312,7 +312,7 @@
the mechanism is present, the two parts must be separated with a colon
<literal><replaceable>type</replaceable>:<replaceable>prefix</replaceable></literal>. The
address generation mechanism may be either <constant>prefixstable</constant> or
- <constant>eui64</constant>. If not specified, <constant>eui64</constant> is assumed. When
+ <constant>static</constant>. If not specified, <constant>static</constant> is assumed. When
set to <literal>prefixstable</literal> a method for generating IPv6 Interface Identifiers to
be used with IPv6 Stateless Address Autocon figuration (SLAAC). See
<ulink url="https://tools.ietf.org/html/rfc7217">RFC 7217</ulink>. When IPv6 address is set,
diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c
index ae38a36975..4bdc26a38f 100644
--- a/src/network/networkd-ndisc.c
+++ b/src/network/networkd-ndisc.c
@@ -278,13 +278,13 @@ static int ndisc_router_generate_address(Link *link, unsigned prefixlen, uint32_
break;
}
}
- } else if (j->address_generation_type == IPV6_TOKEN_ADDRESS_GENERATION_EUI64) {
+ } else if (j->address_generation_type == IPV6_TOKEN_ADDRESS_GENERATION_STATIC) {
memcpy(((uint8_t *)&address->in_addr.in6) + 8, ((uint8_t *) &j->prefix) + 8, 8);
prefix = true;
break;
}
- /* eui64 or fallback if prefixstable do not match */
+ /* fallback to eui64 if prefixstable or static do not match */
if (!prefix) {
/* see RFC4291 section 2.5.1 */
address->in_addr.in6.s6_addr[8] = link->mac.ether_addr_octet[0];
@@ -992,14 +992,20 @@ int config_parse_address_generation_type(
if (r < 0)
return log_oom();
- if (streq(word, "eui64"))
- token->address_generation_type = IPV6_TOKEN_ADDRESS_GENERATION_EUI64;
+ if (streq(word, "static"))
+ token->address_generation_type = IPV6_TOKEN_ADDRESS_GENERATION_STATIC;
else if (streq(word, "prefixstable"))
token->address_generation_type = IPV6_TOKEN_ADDRESS_GENERATION_PREFIXSTABLE;
else {
- token->address_generation_type = IPV6_TOKEN_ADDRESS_GENERATION_EUI64;
+ token->address_generation_type = IPV6_TOKEN_ADDRESS_GENERATION_STATIC;
p = rvalue;
- }
+ }
+
+ if (isempty(p)) {
+ log_syntax(unit, LOG_ERR, filename, line, 0,
+ "Invalid IPv6Token= , ignoring assignment: %s", rvalue);
+ return 0;
+ }
r = in_addr_from_string(AF_INET6, p, &buffer);
if (r < 0) {
diff --git a/src/network/networkd-ndisc.h b/src/network/networkd-ndisc.h
index 18d1a96476..02c2f8afda 100644
--- a/src/network/networkd-ndisc.h
+++ b/src/network/networkd-ndisc.h
@@ -9,7 +9,7 @@ typedef struct IPv6Token IPv6Token;
typedef enum IPv6TokenAddressGeneration {
IPV6_TOKEN_ADDRESS_GENERATION_NONE,
- IPV6_TOKEN_ADDRESS_GENERATION_EUI64,
+ IPV6_TOKEN_ADDRESS_GENERATION_STATIC,
IPV6_TOKEN_ADDRESS_GENERATION_PREFIXSTABLE,
_IPV6_TOKEN_ADDRESS_GENERATION_MAX,
_IPV6_TOKEN_ADDRESS_GENERATION_INVALID = -1,
diff --git a/test/fuzz/fuzz-network-parser/oss-fuzz-20548 b/test/fuzz/fuzz-network-parser/oss-fuzz-20548
new file mode 100644
index 0000000000..82efed50e0
--- /dev/null
+++ b/test/fuzz/fuzz-network-parser/oss-fuzz-20548
Binary files differ
diff --git a/test/test-network/conf/ipv6-prefix-veth-token-eui64.network b/test/test-network/conf/ipv6-prefix-veth-token-static.network
index 1e43bd422b..1e43bd422b 100644
--- a/test/test-network/conf/ipv6-prefix-veth-token-eui64.network
+++ b/test/test-network/conf/ipv6-prefix-veth-token-static.network
diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py
index b62160bf59..027570027d 100755
--- a/test/test-network/systemd-networkd-tests.py
+++ b/test/test-network/systemd-networkd-tests.py
@@ -2680,7 +2680,7 @@ class NetworkdRATests(unittest.TestCase, Utilities):
'25-veth.netdev',
'ipv6-prefix.network',
'ipv6-prefix-veth.network',
- 'ipv6-prefix-veth-token-eui64.network',
+ 'ipv6-prefix-veth-token-static.network',
'ipv6-prefix-veth-token-prefixstable.network']
def setUp(self):
@@ -2706,8 +2706,8 @@ class NetworkdRATests(unittest.TestCase, Utilities):
print(output)
self.assertRegex(output, '2002:da8:1:0')
- def test_ipv6_token_eui64(self):
- copy_unit_to_networkd_unit_path('25-veth.netdev', 'ipv6-prefix.network', 'ipv6-prefix-veth-token-eui64.network')
+ def test_ipv6_token_static(self):
+ copy_unit_to_networkd_unit_path('25-veth.netdev', 'ipv6-prefix.network', 'ipv6-prefix-veth-token-static.network')
start_networkd()
self.wait_online(['veth99:routable', 'veth-peer:degraded'])