Loading...
tests/malloc_size_test.c libmalloc-521.120.7 libmalloc-646.40.3
--- libmalloc/libmalloc-521.120.7/tests/malloc_size_test.c
+++ libmalloc/libmalloc-646.40.3/tests/malloc_size_test.c
@@ -38,7 +38,7 @@
 }
 
 T_DECL(malloc_size_valid, "Test malloc_size() on valid pointers, non-Nano",
-	   T_META_ENVVAR("MallocNanoZone=0"), T_META_TAG_XZONE)
+	   T_META_ENVVAR("MallocNanoZone=0"), T_META_TAG_XZONE, T_META_TAG_VM_NOT_PREFERRED)
 {
 	// Test various sizes, roughly targetting each allocator range.
 	test_malloc_size_valid(2, 256, 16);
@@ -47,13 +47,13 @@
 }
 
 T_DECL(malloc_size_valid_nanov2, "Test malloc_size() on valid pointers for Nanov2",
-	   T_META_ENVVAR("MallocNanoZone=V2"), T_META_TAG_XZONE)
+	   T_META_ENVVAR("MallocNanoZone=V2"), T_META_TAG_XZONE, T_META_TAG_VM_NOT_PREFERRED)
 {
 	test_malloc_size_valid(2, 256, 16);
 }
 
 T_DECL(malloc_size_invalid, "Test malloc_size() on invalid pointers, non-Nano",
-	   T_META_ENVVAR("MallocNanoZone=0"))
+	   T_META_ENVVAR("MallocNanoZone=0"), T_META_TAG_VM_NOT_PREFERRED)
 {
 	// Test various sizes, roughly targetting each allocator range.
 	test_malloc_size_invalid(2, 256, 16);
@@ -62,14 +62,19 @@
 }
 
 T_DECL(malloc_size_invalid_nanov2, "Test malloc_size() on valid pointers for Nanov2",
-	   T_META_ENVVAR("MallocNanoZone=V2"))
+	   T_META_ENVVAR("MallocNanoZone=V2"), T_META_TAG_VM_NOT_PREFERRED)
 {
 	test_malloc_size_invalid(2, 256, 16);
 }
 
+// Exclaves doesn't support calling malloc_size() on freed pointers,
+// specifically tiny ones, since the pages containing the inline freelist may
+// have been depopulated
+#if !MALLOC_TARGET_EXCLAVES
 T_DECL(malloc_size_invalid_xzone,
 		"Test malloc_size() on invalid pointers for xzone",
-		T_META_TAG_XZONE_ONLY)
+		T_META_TAG_XZONE_ONLY,
+	    T_META_TAG_VM_NOT_PREFERRED)
 {
 	// Exhaust early budget
 	void *ptr = NULL;
@@ -120,10 +125,11 @@
 	}
 	free(ptr2);
 }
+#endif // !MALLOC_TARGET_EXCLAVES
 
 #if TARGET_OS_OSX
 T_DECL(malloc_size_large_allocation, "Test malloc_size() on buffers > 4GB",
-		T_META_TAG_XZONE)
+		T_META_TAG_XZONE, T_META_TAG_VM_NOT_PREFERRED)
 {
 	void *ptr = malloc(GiB(4));
 	T_ASSERT_NOTNULL(ptr, "4GB allocation");
@@ -139,7 +145,7 @@
 
 T_DECL(malloc_size_multi_segment,
 		"Make a multi-segment allocation, and pass inner pointers to malloc_size",
-		T_META_TAG_XZONE_ONLY)
+		T_META_TAG_XZONE_ONLY, T_META_TAG_VM_NOT_ELIGIBLE)
 {
 	void *ptr = malloc(MiB(12));
 	T_ASSERT_NOTNULL(ptr, "HUGE allocation");
@@ -155,7 +161,7 @@
 #if TARGET_OS_OSX
 T_DECL(malloc_size_outside_embedded_space,
 		"Make enough allocations to push address space beyond 64GB",
-		T_META_TAG_XZONE_ONLY)
+		T_META_TAG_XZONE_ONLY, T_META_TAG_VM_NOT_ELIGIBLE)
 {
 	// Make 32 2GB allocations (don't fault them to avoid dirty memory) to
 	// exhaust the embedded/low segment table address space
@@ -182,3 +188,12 @@
 	}
 }
 #endif // TARGET_OS_OSX
+
+T_DECL(malloc_size_max_good_size, "Check malloc_good_size(SIZE_MAX)",
+		T_META_TAG_XZONE, T_META_TAG_NANO_ON_XZONE,
+		T_META_ENVVAR("MallocNanoZone=1"))
+{
+	size_t request_size = SIZE_MAX - 5;
+	size_t good_size = malloc_good_size(request_size);
+	T_ASSERT_GE(good_size, request_size, "good_size valid for request");
+}