Loading...
--- libmalloc/libmalloc-657.60.21/src/malloc_common.h
+++ libmalloc/libmalloc-792.41.1/src/malloc_common.h
@@ -96,14 +96,15 @@
 bool
 _malloc_is_platform_binary(void);
 
-#if CONFIG_CHECK_SECURITY_POLICY
 MALLOC_NOEXPORT
 extern bool malloc_internal_security_policy;
-#endif
-
+
+#if !__has_feature(bounds_safety)
 MALLOC_NOEXPORT
 bool
-_malloc_allow_internal_security_policy(void);
+_malloc_allow_internal_security_policy(const char *envp[]);
+#endif
+
 #endif // !MALLOC_TARGET_EXCLAVES && !MALLOC_TARGET_EXCLAVES_INTROSPECTOR
 
 MALLOC_NOEXPORT
@@ -178,6 +179,20 @@
 	MALLOC_PROCESS_VTDECODERXPCSERVICE,
 #endif // TARGET_OS_OSX
 
+#if TARGET_OS_VISION
+	MALLOC_PROCESS_PRESENCED,
+	MALLOC_PROCESS_FACETIME,
+	MALLOC_PROCESS_MANAGEDASSETSD,
+	MALLOC_PROCESS_POLARISD,
+	MALLOC_PROCESS_ARKITD,
+	MALLOC_PROCESS_BACKBOARDD,
+#endif
+
+	MALLOC_PROCESS_REPORTCRASH,
+	MALLOC_PROCESS_AUDIOCONVERTERSERVICE,
+
+	MALLOC_PROCESS_HARDENED_HEAP_CONFIG,
+
 	// NOTE: Processes enumerated above this line are considered "security
 	// critical", and will get additional features (guard pages, more pointer
 	// buckets, etc) if the secure allocator is enabled. Processes below the
@@ -188,7 +203,29 @@
 	// Non security critical processes
 	MALLOC_PROCESS_AEGIRPOSTER,
 	MALLOC_PROCESS_COLLECTIONSPOSTER,
-	MALLOC_PROCESS_MDS_STORES,
+
+#if TARGET_OS_WATCH
+	MALLOC_PROCESS_BACKBOARDD,
+	MALLOC_PROCESS_CLOCKFACE,
+#endif // TARGET_OS_WATCH
+
+#if TARGET_OS_OSX
+	// Processes that need secure allocator
+	MALLOC_PROCESS_GROUPSESSIONSERVICE,
+	MALLOC_PROCESS_IMTRANSCODERAGENT,
+	MALLOC_PROCESS_KEYCHAINSHARINGMESSAGINGD,
+	MALLOC_PROCESS_MESSAGES,
+	MALLOC_PROCESS_SCREENSHARING,
+
+	// Processes that do not get secure allocator
+	MALLOC_PROCESS_VTENCODERXPCSERVICE,
+#endif
+
+#if TARGET_OS_VISION
+	MALLOC_PROCESS_WAKEBOARDD,
+	MALLOC_PROCESS_REALITYCAMERAD,
+#endif
+
 
 	MALLOC_PROCESS_COUNT,
 } malloc_process_identity_t;
@@ -201,6 +238,28 @@
 			identity <= MALLOC_PROCESS_MAX_SEC_CRITICAL;
 }
 
+static MALLOC_INLINE
+bool
+malloc_process_is_security_critical_max_perf(
+		malloc_process_identity_t identity)
+{
+#if TARGET_OS_OSX
+	if (identity == MALLOC_PROCESS_MTLCOMPILERSERVICE) {
+		return true;
+	}
+#elif TARGET_OS_VISION
+	if (identity == MALLOC_PROCESS_ARKITD ||
+			identity == MALLOC_PROCESS_BACKBOARDD) {
+		return true;
+	}
+#endif
+
+	if (identity == MALLOC_PROCESS_HARDENED_HEAP_CONFIG) {
+		return true;
+	}
+
+	return false;
+}
 #endif // CONFIG_MALLOC_PROCESS_IDENTITY
 
 typedef enum : unsigned {
@@ -250,4 +309,25 @@
 	MALLOC_STATIC_ASSERT(offsetof(zone_t, wrapped_zone) == WRAPPED_ZONE_OFFSET, \
 			"malloc_get_wrapped_zone() dependency");
 
+// This function is used to abort the program when freeing an invalid pointer.
+// Its goal, as the naming indicates, is to provide a clear indication in the
+// call stack that libmalloc is intentionally crashing because the client
+// provided a pointer that was deemed invalid.
+#if CONFIG_MTE
+// When MTE is enabled, this function also validates the logical tag of the
+// pointer, causing the process to crash with a fatal exception (which cannot be
+// caught by the process) if it is invalid.
+#endif
+MALLOC_NOEXPORT MALLOC_NOINLINE
+void
+___BUG_IN_CLIENT_OF_LIBMALLOC_POINTER_BEING_FREED_WAS_NOT_ALLOCATED(
+	int flags,
+	void *__unsafe_indexable ptr);
+
+static MALLOC_INLINE
+void
+malloc_report_pointer_was_not_allocated(int f, void *__unsafe_indexable p) {
+	___BUG_IN_CLIENT_OF_LIBMALLOC_POINTER_BEING_FREED_WAS_NOT_ALLOCATED(f, p);
+}
+
 #endif // __MALLOC_COMMON_H