summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2020-09-23 10:58:03 +0200
committerBeniamino Galvani <bgalvani@redhat.com>2020-09-23 11:00:19 +0200
commit364c7c278a19959c6e880329533937dbcf7b19a4 (patch)
tree39499643c31579021db116ce62751b2baae72a1b
parentf22364429135f55094fb89879f1fa7bad066727f (diff)
downloadNetworkManager-bg/initrd-mac-iface.tar.gz
initrd: fix parsing IPv6 prefix lengthbg/initrd-mac-iface
The generator didn't accept prefix lengths > 32 for IPv6: $ src/initrd/nm-initrd-generator --stdout -- ip=[fd01::1]:::40::ens0 <warn> [1600851580.7875] cmdline-reader: Invalid IP mask: 40 https://bugzilla.redhat.com/show_bug.cgi?id=1879795
-rw-r--r--src/initrd/nmi-cmdline-reader.c5
-rw-r--r--src/initrd/tests/test-cmdline-reader.c3
2 files changed, 5 insertions, 3 deletions
diff --git a/src/initrd/nmi-cmdline-reader.c b/src/initrd/nmi-cmdline-reader.c
index 8196e9fb78..ee3dab2574 100644
--- a/src/initrd/nmi-cmdline-reader.c
+++ b/src/initrd/nmi-cmdline-reader.c
@@ -426,12 +426,13 @@ reader_parse_ip (Reader *reader, const char *sysfs_dir, char *argument)
s_ip6 = nm_connection_get_setting_ip6_config (connection);
if (netmask && *netmask) {
+ gboolean is_ipv4 = client_ip_family == AF_INET;
NMIPAddr addr;
- if (nm_utils_parse_inaddr_bin (AF_INET, netmask, NULL, &addr))
+ if (is_ipv4 && nm_utils_parse_inaddr_bin (AF_INET, netmask, NULL, &addr))
client_ip_prefix = nm_utils_ip4_netmask_to_prefix (addr.addr4);
else
- client_ip_prefix = _nm_utils_ascii_str_to_int64 (netmask, 10, 0, 32, -1);
+ client_ip_prefix = _nm_utils_ascii_str_to_int64 (netmask, 10, 0, is_ipv4 ? 32 : 128, -1);
if (client_ip_prefix == -1)
_LOGW (LOGD_CORE, "Invalid IP mask: %s", netmask);
diff --git a/src/initrd/tests/test-cmdline-reader.c b/src/initrd/tests/test-cmdline-reader.c
index 4a2f33fc02..d67f599337 100644
--- a/src/initrd/tests/test-cmdline-reader.c
+++ b/src/initrd/tests/test-cmdline-reader.c
@@ -341,7 +341,7 @@ test_multiple_merge (void)
{
gs_unref_hashtable GHashTable *connections = NULL;
const char *const*ARGV = NM_MAKE_STRV ("ip=192.0.2.2:::::eth0",
- "ip=[2001:db8::2]:::::eth0");
+ "ip=[2001:db8::2]:::56::eth0");
NMConnection *connection;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
@@ -384,6 +384,7 @@ test_multiple_merge (void)
ip_addr = nm_setting_ip_config_get_address (s_ip6, 0);
g_assert (ip_addr);
g_assert_cmpstr (nm_ip_address_get_address (ip_addr), ==, "2001:db8::2");
+ g_assert_cmpint (nm_ip_address_get_prefix (ip_addr), ==, 56);
}
static void