]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Fix double free of virtual namespace tree
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Mon, 5 Mar 2018 07:44:41 +0000 (13:44 +0600)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Mon, 5 Mar 2018 07:44:41 +0000 (13:44 +0600)
src/main/virtual_servers.c

index 21cb94ac7e7690bab6bc4c44b0c04bc788b4fcf1..7e22af32008db210037b2710093687a0204753cd 100644 (file)
@@ -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);