]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: refuse empty or numeric route table names
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 8 Dec 2021 20:50:01 +0000 (05:50 +0900)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 9 Dec 2021 08:06:41 +0000 (09:06 +0100)
src/network/networkd-route-util.c
src/network/test-network.c

index f5b502f46443e85b65e40ec9eda4e09794d7457f..c202078f07d6276ed20f6269ea83b7c691cbd759 100644 (file)
@@ -360,9 +360,19 @@ int config_parse_route_table_names(
 
                 *num++ = '\0';
 
+                if (isempty(name)) {
+                        log_syntax(unit, LOG_WARNING, filename, line, 0,
+                                   "Route table name cannot be empty. Ignoring assignment: %s:%s", name, num);
+                        continue;
+                }
+                if (in_charset(name, DIGITS)) {
+                        log_syntax(unit, LOG_WARNING, filename, line, 0,
+                                   "Route table name cannot be numeric. Ignoring assignment: %s:%s", name, num);
+                        continue;
+                }
                 if (STR_IN_SET(name, "default", "main", "local")) {
                         log_syntax(unit, LOG_WARNING, filename, line, 0,
-                                   "Route table name %s already predefined. Ignoring assignment: %s:%s", name, name, num);
+                                   "Route table name %s is already predefined. Ignoring assignment: %s:%s", name, name, num);
                         continue;
                 }
 
index 9026207265862512a7a200e8b7ad175a3b18b19a..4409a47cfba7bda3373dcdeb034f59bb540182fa 100644 (file)
@@ -146,6 +146,12 @@ static void test_route_tables(Manager *manager) {
         assert_se(!manager->route_table_names_by_number);
         assert_se(!manager->route_table_numbers_by_name);
 
+        /* Invalid pairs */
+        assert_se(config_parse_route_table_names("manager", "filename", 1, "section", 1, "RouteTable", 0, "main:123 default:333 local:999", manager, manager) >= 0);
+        assert_se(config_parse_route_table_names("manager", "filename", 1, "section", 1, "RouteTable", 0, "1234:321 :567 hoge:foo aaa:-888", manager, manager) >= 0);
+        assert_se(!manager->route_table_names_by_number);
+        assert_se(!manager->route_table_numbers_by_name);
+
         test_route_tables_one(manager, "default", 253);
         test_route_tables_one(manager, "main", 254);
         test_route_tables_one(manager, "local", 255);