From f19ee6814076337841a4737c7412cc4d230e66f6 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 1 Nov 2018 20:21:26 +0900 Subject: [PATCH] network: fix segfault in manager_free() Fixes #10605. --- src/network/networkd-manager.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index 7433be96ff..9dcd911535 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -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);