From acb71754e12f98ebd01963869a297ea262494740 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Tue, 5 Nov 2019 09:36:39 +0900 Subject: network: use fix invalid free function Fixes #13938. --- src/network/networkd-network.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index 90d86f35a9..5e82b3c5e0 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -306,7 +306,7 @@ int network_verify(Network *network) { LIST_FOREACH_SAFE(prefixes, prefix, prefix_next, network->static_route_prefixes) if (section_is_invalid(prefix->section)) - prefix_free(prefix); + route_prefix_free(prefix); LIST_FOREACH_SAFE(rules, rule, rule_next, network->rules) if (routing_policy_rule_section_verify(rule) < 0) -- cgit v1.2.1 From 9be6ae775fb303deb49ee8e4c5013ce98dc48b93 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Tue, 5 Nov 2019 09:39:44 +0900 Subject: network: fix memleak --- src/network/networkd-network.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index 5e82b3c5e0..f6d02fb274 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -654,6 +654,9 @@ static Network *network_free(Network *network) { while ((prefix = network->static_prefixes)) prefix_free(prefix); + while ((prefix = network->static_route_prefixes)) + route_prefix_free(prefix); + while ((rule = network->rules)) routing_policy_rule_free(rule); @@ -664,6 +667,7 @@ static Network *network_free(Network *network) { hashmap_free(network->neighbors_by_section); hashmap_free(network->address_labels_by_section); hashmap_free(network->prefixes_by_section); + hashmap_free(network->route_prefixes_by_section); hashmap_free(network->rules_by_section); ordered_hashmap_free_with_destructor(network->qdiscs_by_section, qdisc_free); -- cgit v1.2.1 From e7825b2359d484c606bc1ff8ae3e5ab9aaf980c1 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Tue, 5 Nov 2019 10:39:15 +0900 Subject: network: fix invalid cleanup function --- src/network/networkd-radv.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/network/networkd-radv.c b/src/network/networkd-radv.c index 8972c661ae..4e74756d17 100644 --- a/src/network/networkd-radv.c +++ b/src/network/networkd-radv.c @@ -330,7 +330,7 @@ int config_parse_route_prefix(const char *unit, void *userdata) { Network *network = userdata; - _cleanup_(prefix_free_or_set_invalidp) Prefix *p = NULL; + _cleanup_(route_prefix_free_or_set_invalidp) Prefix *p = NULL; uint8_t prefixlen = 64; union in_addr_union in6addr; int r; @@ -372,7 +372,7 @@ int config_parse_route_prefix_lifetime(const char *unit, void *data, void *userdata) { Network *network = userdata; - _cleanup_(prefix_free_or_set_invalidp) Prefix *p = NULL; + _cleanup_(route_prefix_free_or_set_invalidp) Prefix *p = NULL; usec_t usec; int r; -- cgit v1.2.1 From 095b3a7d9030eeed2686d6013fc1416486147c89 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Tue, 5 Nov 2019 10:42:19 +0900 Subject: network: fix typo --- src/network/networkd-radv.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/network/networkd-radv.c b/src/network/networkd-radv.c index 4e74756d17..8d933f1901 100644 --- a/src/network/networkd-radv.c +++ b/src/network/networkd-radv.c @@ -388,7 +388,8 @@ int config_parse_route_prefix_lifetime(const char *unit, r = parse_sec(rvalue, &usec); if (r < 0) { - log_syntax(unit, LOG_ERR, filename, line, r, "Roure lifetime is invalid, ignoring assignment: %s", rvalue); + log_syntax(unit, LOG_ERR, filename, line, r, + "Route lifetime is invalid, ignoring assignment: %s", rvalue); return 0; } -- cgit v1.2.1 From 471e126b254dccac66cb2987be3a5f58592d8932 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Tue, 5 Nov 2019 10:46:44 +0900 Subject: network: fix memleak in route_prefix_free() --- src/network/networkd-radv.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/network/networkd-radv.c b/src/network/networkd-radv.c index 8d933f1901..87db34d6cc 100644 --- a/src/network/networkd-radv.c +++ b/src/network/networkd-radv.c @@ -31,7 +31,7 @@ void prefix_free(Prefix *prefix) { } network_config_section_free(prefix->section); - prefix->radv_prefix = sd_radv_prefix_unref(prefix->radv_prefix); + sd_radv_prefix_unref(prefix->radv_prefix); free(prefix); } @@ -131,6 +131,7 @@ void route_prefix_free(Prefix *prefix) { } network_config_section_free(prefix->section); + sd_radv_route_prefix_unref(prefix->radv_route_prefix); free(prefix); } -- cgit v1.2.1 From c1ed516cde72f9679c9a0d44fe454d85ea4b625f Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Tue, 5 Nov 2019 10:49:07 +0900 Subject: test: add testcase for issue #13938 --- test/fuzz/fuzz-network-parser/github-13938 | Bin 0 -> 65 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 test/fuzz/fuzz-network-parser/github-13938 diff --git a/test/fuzz/fuzz-network-parser/github-13938 b/test/fuzz/fuzz-network-parser/github-13938 new file mode 100644 index 0000000000..a944a5bc06 Binary files /dev/null and b/test/fuzz/fuzz-network-parser/github-13938 differ -- cgit v1.2.1 From 69d7eba1880095f4a9bf9350de777fe7d370c188 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Tue, 5 Nov 2019 13:30:00 +0900 Subject: sd-radv: fix memleak --- src/libsystemd-network/sd-radv.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/libsystemd-network/sd-radv.c b/src/libsystemd-network/sd-radv.c index 5c7f727faa..873a2f40f8 100644 --- a/src/libsystemd-network/sd-radv.c +++ b/src/libsystemd-network/sd-radv.c @@ -99,6 +99,13 @@ static sd_radv *radv_free(sd_radv *ra) { sd_radv_prefix_unref(p); } + while (ra->route_prefixes) { + sd_radv_route_prefix *p = ra->route_prefixes; + + LIST_REMOVE(prefix, ra->route_prefixes, p); + sd_radv_route_prefix_unref(p); + } + free(ra->rdnss); free(ra->dnssl); -- cgit v1.2.1