]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
radix tree test suite: Fix leaky tests
authorMatthew Wilcox <mawilcox@microsoft.com>
Sun, 29 Jan 2017 06:48:34 +0000 (01:48 -0500)
committerMatthew Wilcox <mawilcox@microsoft.com>
Tue, 14 Feb 2017 02:44:06 +0000 (21:44 -0500)
If item_insert() or item_insert_order() failed to insert an item, they
would leak the item they had just created.  This was causing runaway
memory consumption while running the iteration_check testcase, which
proves that Ross has too much memory in his workstation ;-)

Make sure to free the item on error.  Found with -fsanitize=address.

Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com>
Reviewed-by: Rehas Sachdeva <aquannie@gmail.com>
tools/testing/radix-tree/test.c

index e5726e3736468a7003f2b9529a36d84c659ace58..1a257d738a1e4e618563de835d55fc847c5daac1 100644 (file)
@@ -29,15 +29,28 @@ int __item_insert(struct radix_tree_root *root, struct item *item)
        return __radix_tree_insert(root, item->index, item->order, item);
 }
 
-int item_insert(struct radix_tree_root *root, unsigned long index)
+struct item *item_create(unsigned long index, unsigned int order)
 {
-       return __item_insert(root, item_create(index, 0));
+       struct item *ret = malloc(sizeof(*ret));
+
+       ret->index = index;
+       ret->order = order;
+       return ret;
 }
 
 int item_insert_order(struct radix_tree_root *root, unsigned long index,
                        unsigned order)
 {
-       return __item_insert(root, item_create(index, order));
+       struct item *item = item_create(index, order);
+       int err = __item_insert(root, item);
+       if (err)
+               free(item);
+       return err;
+}
+
+int item_insert(struct radix_tree_root *root, unsigned long index)
+{
+       return item_insert_order(root, index, 0);
 }
 
 void item_sanity(struct item *item, unsigned long index)
@@ -61,15 +74,6 @@ int item_delete(struct radix_tree_root *root, unsigned long index)
        return 0;
 }
 
-struct item *item_create(unsigned long index, unsigned int order)
-{
-       struct item *ret = malloc(sizeof(*ret));
-
-       ret->index = index;
-       ret->order = order;
-       return ret;
-}
-
 void item_check_present(struct radix_tree_root *root, unsigned long index)
 {
        struct item *item;