]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
networkd: fix memleak of Rules
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 28 Nov 2017 12:02:33 +0000 (13:02 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 28 Nov 2017 20:34:50 +0000 (21:34 +0100)
This was the issue mentioned in 93f9da6e0a.

src/network/networkd-manager.c
src/network/test-routing-policy-rule.c

index 478fc090b15fd1b5e38f51cb8990631f594f6268..527d2623cae2ac7a5d41e5156c6bdafe70438db8 100644 (file)
@@ -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);
index fc6eb5626d0e0bc20ee4c04fa12598a549a1c582..c29d134de2fb1d84cf4f085b67c5897c83ac0283 100644 (file)
@@ -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) {