Read global ASAN_OPTIONS from a file.

Instead of setting global ASAN_OPTIONS in immutable init.environ.rc,
load them from a file that can be changed later. The file has to be
on the /system partition to both be editable and available at the
early stages of boot.

Also add allocator_may_return_null=1 as that is closer to the
non-ASan allocator behavior.

Bug: 22846541
Change-Id: Ib0f41393c528f2e7cb398470e41f50abf5f4f455
This commit is contained in:
Evgenii Stepanov 2015-08-07 17:04:37 -07:00
parent 4bf3dc9345
commit 0d2dde57fe
2 changed files with 20 additions and 5 deletions

View File

@ -13,6 +13,20 @@ LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
include $(BUILD_PREBUILT)
endif
#######################################
# asan.options
ifeq (address,$(strip $(SANITIZE_TARGET)))
include $(CLEAR_VARS)
LOCAL_MODULE := asan.options
LOCAL_MODULE_CLASS := ETC
LOCAL_SRC_FILES := $(LOCAL_MODULE)
LOCAL_MODULE_PATH := $(TARGET_OUT)
include $(BUILD_PREBUILT)
endif
#######################################
# init.environ.rc
@ -21,6 +35,11 @@ LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE := init.environ.rc
LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
EXPORT_GLOBAL_ASAN_OPTIONS :=
ifeq (address,$(strip $(SANITIZE_TARGET)))
EXPORT_GLOBAL_ASAN_OPTIONS := export ASAN_OPTIONS include=/system/asan.options
LOCAL_REQUIRED_MODULES := asan.options
endif
# Put it here instead of in init.rc module definition,
# because init.rc is conditionally included.
#
@ -39,11 +58,6 @@ local_post_install_cmd_base :=
include $(BUILD_SYSTEM)/base_rules.mk
EXPORT_GLOBAL_ASAN_OPTIONS :=
ifeq (address,$(strip $(SANITIZE_TARGET)))
EXPORT_GLOBAL_ASAN_OPTIONS := export ASAN_OPTIONS allow_user_segv_handler=1:detect_odr_violation=0:alloc_dealloc_mismatch=0
endif
# Regenerate init.environ.rc if PRODUCT_BOOTCLASSPATH has changed.
bcp_md5 := $(word 1, $(shell echo $(PRODUCT_BOOTCLASSPATH) $(PRODUCT_SYSTEM_SERVER_CLASSPATH) | $(MD5SUM)))
bcp_dep := $(intermediates)/$(bcp_md5).bcp.dep

1
rootdir/asan.options Normal file
View File

@ -0,0 +1 @@
allow_user_segv_handler=1:detect_odr_violation=0:alloc_dealloc_mismatch=0:allocator_may_return_null=1