diff --git a/core/config_sanitizers.mk b/core/config_sanitizers.mk index ab68d8d09c..0d182e9e17 100644 --- a/core/config_sanitizers.mk +++ b/core/config_sanitizers.mk @@ -103,15 +103,23 @@ ifneq ($(my_sanitize)$(my_global_sanitize),) endif endif -# Disable integer_overflow if LOCAL_NOSANITIZE=integer. ifneq ($(filter integer_overflow, $(my_global_sanitize) $(my_sanitize)),) + # Disable integer_overflow in excluded paths. + combined_exclude_paths := $(INTEGER_OVERFLOW_EXCLUDE_PATHS) \ + $(PRODUCT_INTEGER_OVERFLOW_EXCLUDE_PATHS) + + ifneq ($(strip $(foreach dir,$(subst $(comma),$(space),$(combined_exclude_paths)),\ + $(filter $(dir)%,$(LOCAL_PATH)))),) + my_sanitize := $(filter-out integer_overflow,$(my_sanitize)) + my_sanitize_diag := $(filter-out integer_overflow,$(my_sanitize_diag)) + endif + # Disable integer_overflow if LOCAL_NOSANITIZE=integer. ifneq ($(filter integer, $(strip $(LOCAL_NOSANITIZE))),) my_sanitize := $(filter-out integer_overflow,$(my_sanitize)) my_sanitize_diag := $(filter-out integer_overflow,$(my_sanitize_diag)) endif endif - my_nosanitize = $(strip $(LOCAL_NOSANITIZE)) ifneq ($(my_nosanitize),) my_sanitize := $(filter-out $(my_nosanitize),$(my_sanitize)) diff --git a/core/product.mk b/core/product.mk index 5e943ceb99..c5ddf817a2 100644 --- a/core/product.mk +++ b/core/product.mk @@ -135,6 +135,7 @@ _product_var_list := \ PRODUCT_IOT \ PRODUCT_SYSTEM_HEADROOM \ PRODUCT_MINIMIZE_JAVA_DEBUG_INFO \ + PRODUCT_INTEGER_OVERFLOW_EXCLUDE_PATHS \ diff --git a/core/product_config.mk b/core/product_config.mk index 71a342da91..36f473ff04 100644 --- a/core/product_config.mk +++ b/core/product_config.mk @@ -431,3 +431,7 @@ PRODUCT_SYSTEM_HEADROOM := \ # Whether to save disk space by minimizing java debug info PRODUCT_MINIMIZE_JAVA_DEBUG_INFO := \ $(strip $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_MINIMIZE_JAVA_DEBUG_INFO)) + +# Whether any paths are excluded from sanitization when SANITIZE_TARGET=integer_overflow +PRODUCT_INTEGER_OVERFLOW_EXCLUDE_PATHS := \ + $(strip $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_INTEGER_OVERFLOW_EXCLUDE_PATHS)) diff --git a/core/soong_config.mk b/core/soong_config.mk index 54a30ea670..cdd289675d 100644 --- a/core/soong_config.mk +++ b/core/soong_config.mk @@ -79,6 +79,7 @@ $(SOONG_VARIABLES): FORCE echo ' "CrossHostSecondaryArch": "$(HOST_CROSS_2ND_ARCH)",'; \ echo ' "Safestack": $(if $(filter true,$(USE_SAFESTACK)),true,false),'; \ echo ' "EnableCFI": $(if $(filter false,$(ENABLE_CFI)),false,true),'; \ + echo ' "IntegerOverflowExcludePaths": $(call json_list,$(INTEGER_OVERFLOW_EXCLUDE_PATHS) $(PRODUCT_INTEGER_OVERFLOW_EXCLUDE_PATHS)),'; \ echo ' "Device_uses_hwc2": $(if $(filter true,$(TARGET_USES_HWC2)),true,false),'; \ echo ' "Override_rs_driver": "$(OVERRIDE_RS_DRIVER)",'; \ echo ' "Treble": $(if $(filter true,$(PRODUCT_FULL_TREBLE)),true,false),'; \