diff options
author | Beniamino Galvani <bgalvani@redhat.com> | 2020-09-23 10:58:03 +0200 |
---|---|---|
committer | Beniamino Galvani <bgalvani@redhat.com> | 2020-09-23 11:00:19 +0200 |
commit | 364c7c278a19959c6e880329533937dbcf7b19a4 (patch) | |
tree | 39499643c31579021db116ce62751b2baae72a1b | |
parent | f22364429135f55094fb89879f1fa7bad066727f (diff) | |
download | NetworkManager-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.c | 5 | ||||
-rw-r--r-- | src/initrd/tests/test-cmdline-reader.c | 3 |
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 |