diff --git a/core/config_sanitizers.mk b/core/config_sanitizers.mk index bbf3b7dff..2b182f5e7 100644 --- a/core/config_sanitizers.mk +++ b/core/config_sanitizers.mk @@ -213,6 +213,11 @@ ifneq ($(filter address thread hwaddress,$(my_sanitize)),) my_sanitize := $(filter-out scudo,$(my_sanitize)) endif +# Or if disabled globally. +ifeq ($(strip $(PRODUCT_DISABLE_SCUDO)),true) + my_sanitize := $(filter-out scudo,$(my_sanitize)) +endif + # Undefined symbols can occur if a non-sanitized library links # sanitized static libraries. That's OK, because the executable # always depends on the ASan runtime library, which defines these diff --git a/core/product.mk b/core/product.mk index c3cbb0c78..d249adf2c 100644 --- a/core/product.mk +++ b/core/product.mk @@ -201,6 +201,7 @@ _product_var_list := \ PRODUCT_ADB_KEYS \ PRODUCT_CFI_INCLUDE_PATHS \ PRODUCT_CFI_EXCLUDE_PATHS \ + PRODUCT_DISABLE_SCUDO \ PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE \ PRODUCT_ACTIONABLE_COMPATIBLE_PROPERTY_DISABLE \ PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS \ diff --git a/core/product_config.mk b/core/product_config.mk index 1f44692ec..4823e248f 100644 --- a/core/product_config.mk +++ b/core/product_config.mk @@ -512,6 +512,10 @@ PRODUCT_CFI_EXCLUDE_PATHS := \ PRODUCT_CFI_INCLUDE_PATHS := \ $(strip $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_CFI_INCLUDE_PATHS)) +# Whether the Scudo hardened allocator is disabled platform-wide +PRODUCT_DISABLE_SCUDO := \ + $(strip $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_DISABLE_SCUDO)) + # Whether any paths are excluded from being set XOM when ENABLE_XOM=true PRODUCT_XOM_EXCLUDE_PATHS := \ $(strip $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_XOM_EXCLUDE_PATHS)) diff --git a/core/soong_config.mk b/core/soong_config.mk index cd8cd7f09..ccfcf871d 100644 --- a/core/soong_config.mk +++ b/core/soong_config.mk @@ -87,6 +87,8 @@ $(call add_json_bool, EnableXOM, $(call invert_bool,$(fi $(call add_json_list, XOMExcludePaths, $(XOM_EXCLUDE_PATHS) $(PRODUCT_XOM_EXCLUDE_PATHS)) $(call add_json_list, IntegerOverflowExcludePaths, $(INTEGER_OVERFLOW_EXCLUDE_PATHS) $(PRODUCT_INTEGER_OVERFLOW_EXCLUDE_PATHS)) +$(call add_json_bool, DisableScudo, $(filter true,$(PRODUCT_DISABLE_SCUDO))) + $(call add_json_bool, ClangTidy, $(filter 1 true,$(WITH_TIDY))) $(call add_json_str, TidyChecks, $(WITH_TIDY_CHECKS)) diff --git a/target/product/go_defaults_common.mk b/target/product/go_defaults_common.mk index 06bdec97e..e35bf30d1 100644 --- a/target/product/go_defaults_common.mk +++ b/target/product/go_defaults_common.mk @@ -69,3 +69,8 @@ PRODUCT_SYSTEM_SERVER_JARS += NetworkStackLib # the size of the system image. This has no bearing on stack traces, but will # leave less information available via JDWP. PRODUCT_MINIMIZE_JAVA_DEBUG_INFO := true + +# Disable Scudo outside of eng builds to save RAM. +ifneq (,$(filter eng, $(TARGET_BUILD_VARIANT))) + PRODUCT_DISABLE_SCUDO := true +endif