initrd: fix crash parsing plain '=' without key

./src/nm-initrd-generator/nm-initrd-generator  -s -- =

Fixes: ecc074b2f8 ('initrd: add command line parser')

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/776
This commit is contained in:
Thomas Haller 2021-08-30 09:01:21 +02:00
parent 553721eed7
commit 01fd4b7d2c
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728
2 changed files with 29 additions and 4 deletions

View file

@ -1335,7 +1335,9 @@ nmi_cmdline_reader_parse(const char * sysfs_dir,
tag = get_word(&argument, '=');
if (nm_streq(tag, "net.ifnames"))
if (!tag) {
/* pass */
} else if (nm_streq(tag, "net.ifnames"))
net_ifnames = !nm_streq(argument, "0");
else if (nm_streq(tag, "rd.peerdns"))
reader->ignore_auto_dns = !_nm_utils_ascii_str_to_bool(argument, TRUE);
@ -1369,7 +1371,9 @@ nmi_cmdline_reader_parse(const char * sysfs_dir,
argument = argument_clone;
tag = get_word(&argument, '=');
if (nm_streq(tag, "ip"))
if (!tag) {
/* pass */
} else if (nm_streq(tag, "ip"))
reader_parse_ip(reader, sysfs_dir, argument);
else if (nm_streq(tag, "rd.route")) {
if (!routes)

View file

@ -300,7 +300,7 @@ test_dhcp_timeout(void)
static void
test_if_auto_with_mtu(void)
{
const char *const *ARGV = NM_MAKE_STRV("ip=eth0:dhcp,dhcp6:1666");
const char *const *ARGV = NM_MAKE_STRV("ip=eth0:dhcp,dhcp6:1666", "=");
gs_unref_object NMConnection *connection = NULL;
NMSettingConnection * s_con;
NMSettingWired * s_wired;
@ -471,7 +471,7 @@ test_if_ip4_manual(void)
static void
test_if_ip4_manual_no_dev(void)
{
const char *const * ARGV = NM_MAKE_STRV("ip=192.0.2.2::192.0.2.1:24:::");
const char *const * ARGV = NM_MAKE_STRV("ip=192.0.2.2::192.0.2.1:24:::", "=foo");
NMConnection * connection;
NMSettingConnection *s_con;
NMSettingIPConfig * s_ip4;
@ -2471,6 +2471,26 @@ test_rd_ethtool(void)
g_hash_table_unref(connections);
}
/*****************************************************************************/
static void
test_plain_equal_char(void)
{
_parse_no_con(NM_MAKE_STRV("="));
_parse_no_con(NM_MAKE_STRV("=foo"));
_parse_no_con(NM_MAKE_STRV("BOOT_IMAGE=(hd0,msdos2)/boot/vmlinuz-5.13.10-100.fc33.x86_64",
"root=UUID=ff252b4a-8294-4961-abcb-74c8fc868db7",
"ro",
"rhgb",
"quiet",
"pci",
"=",
"nomsi,",
"noaer"));
}
/*****************************************************************************/
NMTST_DEFINE();
int
@ -2526,6 +2546,7 @@ main(int argc, char **argv)
g_test_add_func("/initrd/cmdline/infiniband/pkey", test_infiniband_pkey);
g_test_add_func("/initrd/cmdline/carrier_timeout", test_carrier_timeout);
g_test_add_func("/initrd/cmdline/rd_ethtool", test_rd_ethtool);
g_test_add_func("/initrd/cmdline/plain_equal_char", test_plain_equal_char);
return g_test_run();
}