From: Arran Cudbard-Bell Date: Mon, 5 Mar 2018 07:44:41 +0000 (+0600) Subject: Fix double free of virtual namespace tree X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d9193aa858b11356d2daf0d59dcd5dbdb3c23633;p=thirdparty%2Ffreeradius-server.git Fix double free of virtual namespace tree --- diff --git a/src/main/virtual_servers.c b/src/main/virtual_servers.c index 21cb94ac7e7..7e22af32008 100644 --- a/src/main/virtual_servers.c +++ b/src/main/virtual_servers.c @@ -619,9 +619,18 @@ void virtual_server_namespace_register(char const *namespace, fr_virtual_server_ vns_tree = cf_data_value(cf_data_find(virtual_server_root, rbtree_t, "vns_tree")); if (!vns_tree) { - MEM(vns_tree = rbtree_create(virtual_server_root, + /* + * Tree will be freed when the cf_data is freed + * so it shouldn't be parented from + * virtual_server_root. + */ + MEM(vns_tree = rbtree_create(NULL, _virtual_namespace_cmp, _virtual_namespace_free, RBTREE_FLAG_REPLACE)); - cf_data_add(virtual_server_root, vns_tree, "vns_tree", true); + + if (!cf_data_add(virtual_server_root, vns_tree, "vns_tree", true)) { + talloc_free(vns_tree); + return; + } } rbtree_insert(vns_tree, vns);