diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2019-11-05 20:16:06 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-11-05 20:16:06 +0900 |
commit | c631c3d6a340c13adf05dc9b06bd7bd566bd6c9e (patch) | |
tree | 06281db1403a7480cba2c1fdcaf8e47d0d41741a /src/network | |
parent | 09d0b46ab61bebafe5bdc1be95ee153dfb13d6bc (diff) | |
parent | 69d7eba1880095f4a9bf9350de777fe7d370c188 (diff) | |
download | systemd-c631c3d6a340c13adf05dc9b06bd7bd566bd6c9e.tar.gz |
Merge pull request #13939 from yuwata/network-fix-memleak-and-13938
network: fix memleak and invalid free function
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/networkd-network.c | 6 | ||||
-rw-r--r-- | src/network/networkd-radv.c | 10 |
2 files changed, 11 insertions, 5 deletions
diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index 90d86f35a9..f6d02fb274 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) @@ -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); diff --git a/src/network/networkd-radv.c b/src/network/networkd-radv.c index 8972c661ae..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); } @@ -330,7 +331,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 +373,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; @@ -388,7 +389,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; } |