test_maple_tree: Add fuzz testcase 9
authorLiam R. Howlett <Liam.Howlett@oracle.com>
Tue, 8 Mar 2022 14:46:14 +0000 (09:46 -0500)
committerLiam R. Howlett <Liam.Howlett@oracle.com>
Tue, 8 Mar 2022 18:19:17 +0000 (13:19 -0500)
Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
lib/test_maple_tree.c

index 61781df806826fa6eb1879062dc9a326fd5286dd..dacfe061c2582c10eb358121c6db2e0997a76d5b 100644 (file)
@@ -37473,6 +37473,51 @@ static noinline void check_fuzzer(struct maple_tree *mt)
        mtree_test_load(mt, 67); // 0x20cbf
        mtree_test_insert(mt, 1, (void *)0x3); // -17
        mtree_test_erase(mt, 67167); // 0x87
+       mtree_destroy(mt);
+
+       /*
+        * 9. spanning store to the end of data caused an invalid metadata
+        * length which resulted in a crash eventually.
+        * Fix by checking if there is a value in pivot before incrementing the
+        * metadata end in mab_mas_cp().  To ensure this doesn't happen again,
+        * abstract the two locations this happens into a function called
+        * mas_leaf_set_meta().
+        */
+       mt_init_flags(mt, 0);
+       mtree_test_insert(mt, 21, (void *)0x2b); // 0
+       mtree_test_insert(mt, 12, (void *)0x19); // 0
+       mtree_test_insert(mt, 6, (void *)0xd); // 0
+       mtree_test_insert(mt, 8, (void *)0x11); // 0
+       mtree_test_insert(mt, 2, (void *)0x5); // 0
+       mtree_test_insert(mt, 91, (void *)0xb7); // 0
+       mtree_test_insert(mt, 18, (void *)0x25); // 0
+       mtree_test_insert(mt, 81, (void *)0xa3); // 0
+       mtree_test_store_range(mt, 0, 128, (void *)0x1); // 0
+       mtree_test_store(mt , 1, (void *)0x3); // 0
+       mtree_test_erase(mt, 8); // (nil)
+       mtree_test_insert(mt, 11, (void *)0x17); // 0
+       mtree_test_insert(mt, 8, (void *)0x11); // 0
+       mtree_test_insert(mt, 21, (void *)0x2b); // 0
+       mtree_test_insert(mt, 2, (void *)0x5); // 0
+       mtree_test_insert(mt, 18446744073709551605UL, (void *)0xffffffffffffffeb); // 0
+       mtree_test_erase(mt, 18446744073709551605UL); // 0x1
+       mtree_test_store_range(mt, 0, 281, (void *)0x1); // 0
+       mtree_test_erase(mt, 2); // 0xffffffffffffffeb
+       mtree_test_insert(mt, 1211, (void *)0x977); // 0
+       mtree_test_insert(mt, 111, (void *)0xdf); // 0
+       mtree_test_insert(mt, 13, (void *)0x1b); // 0
+       mtree_test_insert(mt, 211, (void *)0x1a7); // 0
+       mtree_test_insert(mt, 11, (void *)0x17); // 0
+       mtree_test_insert(mt, 5, (void *)0xb); // 0
+       mtree_test_insert(mt, 1218, (void *)0x985); // 0
+       mtree_test_insert(mt, 61, (void *)0x7b); // 0
+       mtree_test_store(mt , 1, (void *)0x3); // 0
+       mtree_test_insert(mt, 121, (void *)0xf3); // 0
+       mtree_test_insert(mt, 8, (void *)0x11); // 0
+       mtree_test_insert(mt, 21, (void *)0x2b); // 0
+       mtree_test_insert(mt, 2, (void *)0x5); // 0
+       mtree_test_insert(mt, 18446744073709551605UL, (void *)0xffffffffffffffeb); // 0
+       mtree_test_erase(mt, 18446744073709551605UL); // 0x1
 }
 
 static DEFINE_MTREE(tree);