From: Yu Watanabe Date: Thu, 1 Nov 2018 11:21:26 +0000 (+0900) Subject: network: fix segfault in manager_free() X-Git-Tag: v240~424^2~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f19ee6814076337841a4737c7412cc4d230e66f6;p=thirdparty%2Fsystemd.git network: fix segfault in manager_free() Fixes #10605. --- diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index 7433be96ffb..9dcd9115358 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);