]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: fix segfault in manager_free()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 1 Nov 2018 11:21:26 +0000 (20:21 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 1 Nov 2018 11:26:02 +0000 (20:26 +0900)
Fixes #10605.

src/network/networkd-manager.c

index 7433be96ffb8de36a94f66ed5f7cd12019fe109c..9dcd911535877a932932230073fb191a5d63105a 100644 (file)
@@ -1451,8 +1451,10 @@ void manager_free(Manager *m) {
         while ((pool = m->address_pools))
                 address_pool_free(pool);
 
-        set_free_with_destructor(m->rules, routing_policy_rule_free);
-        set_free_with_destructor(m->rules_foreign, routing_policy_rule_free);
+        /* routing_policy_rule_free() access m->rules and m->rules_foreign.
+         * So, it is necessary to set NULL after the sets are freed. */
+        m->rules = set_free_with_destructor(m->rules, routing_policy_rule_free);
+        m->rules_foreign = set_free_with_destructor(m->rules_foreign, routing_policy_rule_free);
         set_free_with_destructor(m->rules_saved, routing_policy_rule_free);
 
         sd_event_unref(m->event);