Skip to content

Commit e8e91a8

Browse files
committed
network: refuse to override predefined route table name
1 parent f4defbd commit e8e91a8

File tree

3 files changed

+14
-5
lines changed

3 files changed

+14
-5
lines changed

man/networkd.conf.xml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,10 @@
8989
colon, i.e., <literal><replaceable>name</replaceable>:<replaceable>number</replaceable></literal>.
9090
The route table name must not be <literal>default</literal>, <literal>main</literal>, or
9191
<literal>local</literal>, as these route table names are predefined with route table number 253,
92-
254, and 255, respectively. The route table number must be an integer in the range 1…4294967295.
93-
This setting can be specified multiple times. If an empty string is specified, then the list
94-
specified earlier are cleared. Defaults to unset.</para></listitem>
92+
254, and 255, respectively. The route table number must be an integer in the range 1…4294967295,
93+
except for predefined numbers 253, 254, and 255. This setting can be specified multiple times.
94+
If an empty string is specified, then the list specified earlier are cleared. Defaults to unset.
95+
</para></listitem>
9596
</varlistentry>
9697

9798
<varlistentry>

src/network/networkd-route-util.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -501,9 +501,10 @@ int config_parse_route_table_names(
501501
"Route table name cannot be numeric. Ignoring assignment: %s:%s", name, num);
502502
continue;
503503
}
504-
if (STR_IN_SET(name, "default", "main", "local")) {
504+
if (route_table_from_string(name) >= 0) {
505505
log_syntax(unit, LOG_WARNING, filename, line, 0,
506-
"Route table name %s is already predefined. Ignoring assignment: %s:%s", name, name, num);
506+
"Route table name %s is predefined for %i. Ignoring assignment: %s:%s",
507+
name, route_table_from_string(name), name, num);
507508
continue;
508509
}
509510

@@ -518,6 +519,12 @@ int config_parse_route_table_names(
518519
"Invalid route table number, ignoring assignment: %s:%s", name, num);
519520
continue;
520521
}
522+
if (route_table_to_string(table)) {
523+
log_syntax(unit, LOG_WARNING, filename, line, 0,
524+
"Route table name for %s is predefined (%s). Ignoring assignment: %s:%s",
525+
num, route_table_to_string(table), name, num);
526+
continue;
527+
}
521528

522529
r = hashmap_ensure_put(&m->route_table_numbers_by_name, &string_hash_ops_free, name, UINT32_TO_PTR(table));
523530
if (r == -ENOMEM)

src/network/test-network.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ static void test_route_tables(Manager *manager) {
153153

154154
/* Invalid pairs */
155155
assert_se(config_parse_route_table_names("manager", "filename", 1, "section", 1, "RouteTable", 0, "main:123 default:333 local:999", manager, manager) >= 0);
156+
assert_se(config_parse_route_table_names("manager", "filename", 1, "section", 1, "RouteTable", 0, "xxx:253 yyy:254 local:255", manager, manager) >= 0);
156157
assert_se(config_parse_route_table_names("manager", "filename", 1, "section", 1, "RouteTable", 0, "1234:321 :567 hoge:foo aaa:-888", manager, manager) >= 0);
157158
assert_se(!manager->route_table_names_by_number);
158159
assert_se(!manager->route_table_numbers_by_name);

0 commit comments

Comments
 (0)