From 202c7a786c17cc8747c1aa2fed70de47aabfa227 Mon Sep 17 00:00:00 2001 From: Evgenii Stepanov Date: Thu, 7 Jul 2016 10:56:39 -0700 Subject: [PATCH] Enable LOCAL_SANITIZE:=cfi and add LOCAL_SANITIZE_DIAG. Bug: 22033465 Change-Id: Ie011f888f55a2cfb5c943070a3844cb541812afe --- core/clear_vars.mk | 1 + core/config_sanitizers.mk | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/core/clear_vars.mk b/core/clear_vars.mk index 55d00213b..d46dff317 100644 --- a/core/clear_vars.mk +++ b/core/clear_vars.mk @@ -191,6 +191,7 @@ LOCAL_DPI_VARIANTS:= LOCAL_DPI_FILE_STEM:= LOCAL_SANITIZE:= LOCAL_SANITIZE_RECOVER:= +LOCAL_SANITIZE_DIAG:= LOCAL_NOSANITIZE:= LOCAL_DBUS_PROXY_PREFIX:= LOCAL_INIT_RC:= diff --git a/core/config_sanitizers.mk b/core/config_sanitizers.mk index ac3e4fc85..2e14fef5f 100644 --- a/core/config_sanitizers.mk +++ b/core/config_sanitizers.mk @@ -133,6 +133,11 @@ ifneq ($(my_sanitize),) endif endif +ifneq ($(filter cfi,$(my_sanitize)),) + my_cflags += -flto -fsanitize-cfi-cross-dso -fvisibility=default + my_ldflags += -flto -fsanitize-cfi-cross-dso -fsanitize=cfi -Wl,-plugin-opt,O1 -Wl,-export-dynamic-symbol=__cfi_check +endif + # If local or global modules need ASAN, add linker flags. ifneq ($(filter address,$(my_global_sanitize) $(my_sanitize)),) my_ldflags += $(ADDRESS_SANITIZER_CONFIG_EXTRA_LDFLAGS) @@ -187,3 +192,13 @@ ifneq ($(strip $(LOCAL_SANITIZE_RECOVER)),) recover_arg := $(subst $(space),$(comma),$(LOCAL_SANITIZE_RECOVER)), my_cflags += -fsanitize-recover=$(recover_arg) endif + +ifneq ($(strip $(LOCAL_SANITIZE_DIAG)),) + notrap_arg := $(subst $(space),$(comma),$(LOCAL_SANITIZE_DIAG)), + my_cflags += -fno-sanitize-trap=$(notrap_arg) + # Diagnostic requires a runtime library, unless ASan or TSan are also enabled. + ifeq ($(filter address thread,$(my_sanitize)),) + # Does not have to be the first DT_NEEDED unlike ASan. + my_shared_libraries += $($(LOCAL_2ND_ARCH_VAR_PREFIX)UBSAN_RUNTIME_LIBRARY) + endif +endif