@@ -194,6 +194,9 @@ ISO_DTOR_CLEANUP = -DISO_DTOR_CLEANUP=0
194194# # UAF_PTR_PAGE is enabled for better crash handling
195195SIGNAL_HANDLER = -DSIGNAL_HANDLER=0
196196
197+ # # Enable AARCH64 / ARMv8.5a Memory Tagging Extension support
198+ # ARM_MTE = -DARM_MTE=1 -march=armv8.5-a+memtag
199+
197200# # If you know your target will have an ARMv8.1-A or newer and
198201# # supports Top Byte Ignore (TBI) then you want to enable this.
199202# # (Currently unused)
@@ -280,6 +283,23 @@ LTO =
280283HUGE_PAGES =
281284endif
282285
286+ ifneq ($(ARM_MTE ) , )
287+ ifneq ($(UNAME ) , Linux)
288+ $(error "ARM MTE is only supported on Linux / Android")
289+ endif
290+
291+ ifneq ($(DISABLE_CANARY ) , -DDISABLE_CANARY=1)
292+ $(error "Disable canaries before continuing")
293+ endif
294+
295+ ifneq ($(MEMORY_TAGGING ) , -DMEMORY_TAGGING=0)
296+ $(error "Disable software tagging before continuing")
297+ endif
298+
299+ CC = clang-12
300+ CXX = clang++-12
301+ endif
302+
283303HOOKS = $(MALLOC_HOOK )
284304OPTIMIZE = -O2 -fstrict-aliasing -Wstrict-aliasing
285305COMMON_CFLAGS = -Wall -Iinclude/ $(THREAD_SUPPORT ) $(PRE_POPULATE_PAGES ) $(STARTUP_MEM_USAGE )
@@ -295,7 +315,7 @@ CFLAGS += $(COMMON_CFLAGS) $(DISABLE_CANARY) $(BUILD_ERROR_FLAGS) $(HOOKS) $(HEA
295315 $(ABORT_NO_ENTROPY ) $(ISO_DTOR_CLEANUP ) $(RANDOMIZE_FREELIST ) $(USE_SPINLOCK ) $(HUGE_PAGES ) $(USE_MLOCK ) \
296316 $(MEMORY_TAGGING ) $(STRONG_SIZE_ISOLATION ) $(MEMSET_SANITY ) $(AUTO_CTOR_DTOR ) $(SIGNAL_HANDLER ) \
297317 $(BIG_ZONE_META_DATA_GUARD ) $(BIG_ZONE_GUARD ) $(PROTECT_UNUSED_BIG_ZONE ) $(MASK_PTRS ) $(SANITIZE_CHUNKS ) $(FUZZ_MODE ) \
298- $(PERM_FREE_REALLOC )
318+ $(PERM_FREE_REALLOC ) $( ARM_MTE )
299319CXXFLAGS = $(COMMON_CFLAGS ) -DCPP_SUPPORT=1 -std=$(STDCXX ) $(SANITIZER_SUPPORT ) $(HOOKS )
300320
301321EXE_CFLAGS = -fPIE
@@ -385,7 +405,19 @@ tests: clean library_debug_unit_tests
385405 $(CC ) $(CFLAGS ) $(EXE_CFLAGS ) $(DEBUG_LOG_FLAGS ) $(GDB_FLAGS ) $(OS_FLAGS ) tests/pool_test.c $(ISO_ALLOC_PRINTF_SRC ) -o $(BUILD_DIR ) /pool_test $(LDFLAGS )
386406 utils/run_tests.sh
387407
408+ mte_test : clean
409+ @echo " make mte_test"
410+ $(CC ) $(CFLAGS ) $(C_SRCS ) $(DEBUG_LOG_FLAGS ) $(GDB_FLAGS ) $(EXE_CFLAGS ) $(OS_FLAGS ) tests/tests.c -o $(BUILD_DIR ) /tests
411+ $(CC ) $(CFLAGS ) $(C_SRCS ) $(DEBUG_LOG_FLAGS ) $(GDB_FLAGS ) $(EXE_CFLAGS ) $(OS_FLAGS ) tests/interfaces_test.c -o $(BUILD_DIR ) /interfaces_test
412+ $(CC ) $(CFLAGS ) $(C_SRCS ) $(DEBUG_LOG_FLAGS ) $(GDB_FLAGS ) $(EXE_CFLAGS ) $(OS_FLAGS ) tests/heap_overflow.c -o $(BUILD_DIR ) /heap_overflow
413+ $(CC ) $(CFLAGS ) $(C_SRCS ) $(DEBUG_LOG_FLAGS ) $(GDB_FLAGS ) $(EXE_CFLAGS ) $(OS_FLAGS ) tests/double_free.c -o $(BUILD_DIR ) /double_free
414+ qemu-aarch64-static -cpu max build/tests
415+ qemu-aarch64-static -cpu max build/interfaces_test
416+ qemu-aarch64-static -cpu max build/heap_overflow
417+ qemu-aarch64-static -cpu max build/double_free
418+
388419tagging_tests : clean cpp_library_debug
420+ @echo " make tagging_tests"
389421 $(CC ) $(CFLAGS ) $(EXE_CFLAGS ) $(DEBUG_LOG_FLAGS ) $(GDB_FLAGS ) $(OS_FLAGS ) tests/tagged_ptr_test.c $(ISO_ALLOC_PRINTF_SRC ) -o $(BUILD_DIR ) /tagged_ptr_test $(LDFLAGS )
390422 $(CC ) $(CFLAGS ) $(EXE_CFLAGS ) $(DEBUG_LOG_FLAGS ) $(GDB_FLAGS ) $(OS_FLAGS ) tests/uaf_tag_ptr_test.c $(ISO_ALLOC_PRINTF_SRC ) -o $(BUILD_DIR ) /uaf_tag_ptr_test $(LDFLAGS )
391423 $(CC ) $(CFLAGS ) $(EXE_CFLAGS ) $(DEBUG_LOG_FLAGS ) $(GDB_FLAGS ) $(OS_FLAGS ) tests/bad_tag_ptr_test.c $(ISO_ALLOC_PRINTF_SRC ) -o $(BUILD_DIR ) /bad_tag_ptr_test $(LDFLAGS )
0 commit comments