From: Zbigniew Jędrzejewski-Szmek Date: Tue, 28 Nov 2017 12:02:33 +0000 (+0100) Subject: networkd: fix memleak of Rules X-Git-Tag: v236~99^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b921fcb2acbcac7535b3d38e27384f86c51bcbbb;p=thirdparty%2Fsystemd.git networkd: fix memleak of Rules This was the issue mentioned in 93f9da6e0a. --- diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index 478fc090b15..527d2623cae 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -1223,7 +1223,6 @@ int manager_new(Manager **ret, sd_event *event) { } void manager_free(Manager *m) { - RoutingPolicyRule *rule; Network *network; NetDev *netdev; Link *link; @@ -1253,10 +1252,7 @@ void manager_free(Manager *m) { set_free(m->rules); set_free(m->rules_foreign); - while ((rule = set_steal_first(m->rules_saved))) - free(rule); - - set_free(m->rules_saved); + set_free_with_destructor(m->rules_saved, routing_policy_rule_free); sd_netlink_unref(m->rtnl); sd_event_unref(m->event); diff --git a/src/network/test-routing-policy-rule.c b/src/network/test-routing-policy-rule.c index fc6eb5626d0..c29d134de2f 100644 --- a/src/network/test-routing-policy-rule.c +++ b/src/network/test-routing-policy-rule.c @@ -34,7 +34,7 @@ static void test_rule_serialization(const char *title, const char *ruleset, cons const char *cmd; int fd, fd2, fd3; _cleanup_fclose_ FILE *f = NULL, *f2 = NULL, *f3 = NULL; - _cleanup_set_free_free_ Set *rules = NULL; + Set *rules = NULL; _cleanup_free_ char *buf = NULL; size_t buf_size; @@ -64,6 +64,8 @@ static void test_rule_serialization(const char *title, const char *ruleset, cons cmd = strjoina("diff -u ", pattern3, " ", pattern2); log_info("$ %s", cmd); assert_se(system(cmd) == 0); + + set_free_with_destructor(rules, routing_policy_rule_free); } int main(int argc, char **argv) {