From 257de3def5092797a9ab29551c94bcc57e07eaa0 Mon Sep 17 00:00:00 2001 From: Jiyong Park Date: Thu, 31 Aug 2017 16:42:23 +0900 Subject: [PATCH] fix: boot fails on ASAN builds with VNDK restriction Fix the bug that caused boot failure on ASAN builds with VNDK restriciton. The major cause is because incorrect (old) ld.config.txt was used when the build is sanitized, which prevented the dynamic linker to find some VNDK libs that only exist in /system/lib/vndk; the old ld.config.txt does not have the directory in its search paths. So, this CL fixes the problem by having the same ld.config.txt for both sanitized and non-sanitizied builds. Furthermore, ld.config.txt is modified so that dependency to libclang_rt* libs are redirected to those in /system/lib directory. This ensures that the sanitizer runtime libs are not dual loaded but are provided for both platform and vendors. Bug: 65217017 Test: SANITIZE_TARGET=integer_overflow SANITIZE_TARGET_DIAG=integer_overflow m on 2017 pixel devices. The build is successful and the device boots to the UI. Merged-In: I0e21e20d9aca340b984968e07d4ce542ae10fd31 Change-Id: I0e21e20d9aca340b984968e07d4ce542ae10fd31 (cherry picked from commit faefa6bd3682a0e8f5de2184cca5960a82a00020) --- rootdir/Android.mk | 11 +++++++++++ rootdir/etc/ld.config.txt.in | 6 +++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/rootdir/Android.mk b/rootdir/Android.mk index f747a96ca..fd4625172 100644 --- a/rootdir/Android.mk +++ b/rootdir/Android.mk @@ -203,22 +203,33 @@ vndk_sameprocess_libraries := $(subst $(space),:,$(addsuffix .so,$(VNDK_SAMEPROC vndk_core_libraries := $(subst $(space),:,$(addsuffix .so,$(VNDK_CORE_LIBRARIES))) +sanitizer_runtime_libraries := $(subst $(space),:,$(addsuffix .so,\ +$(ADDRESS_SANITIZER_RUNTIME_LIBRARY) \ +$(UBSAN_RUNTIME_LIBRARY) \ +$(TSAN_RUNTIME_LIBRARY) \ +$(2ND_ADDRESS_SANITIZER_RUNTIME_LIBRARY) \ +$(2ND_UBSAN_RUNTIME_LIBRARY) \ +$(2ND_TSAN_RUNTIME_LIBRARY))) + $(LOCAL_BUILT_MODULE): PRIVATE_LLNDK_LIBRARIES := $(llndk_libraries) $(LOCAL_BUILT_MODULE): PRIVATE_VNDK_SAMEPROCESS_LIBRARIES := $(vndk_sameprocess_libraries) $(LOCAL_BUILT_MODULE): PRIVATE_LLNDK_PRIVATE_LIBRARIES := $(llndk_private_libraries) $(LOCAL_BUILT_MODULE): PRIVATE_VNDK_CORE_LIBRARIES := $(vndk_core_libraries) +$(LOCAL_BUILT_MODULE): PRIVATE_SANITIZER_RUNTIME_LIBRARIES := $(sanitizer_runtime_libraries) $(LOCAL_BUILT_MODULE): $(LOCAL_PATH)/etc/ld.config.txt.in $(vndk_lib_dep) @echo "Generate: $< -> $@" @mkdir -p $(dir $@) $(hide) sed -e 's?%LLNDK_LIBRARIES%?$(PRIVATE_LLNDK_LIBRARIES)?g' $< >$@ $(hide) sed -i -e 's?%VNDK_SAMEPROCESS_LIBRARIES%?$(PRIVATE_VNDK_SAMEPROCESS_LIBRARIES)?g' $@ $(hide) sed -i -e 's?%VNDK_CORE_LIBRARIES%?$(PRIVATE_VNDK_CORE_LIBRARIES)?g' $@ + $(hide) sed -i -e 's?%SANITIZER_RUNTIME_LIBRARIES%?$(PRIVATE_SANITIZER_RUNTIME_LIBRARIES)?g' $@ vndk_lib_md5 := vndk_lib_dep := llndk_libraries := vndk_sameprocess_libraries := vndk_core_libraries := +sanitizer_runtime_libraries := else # if _enforce_vndk_at_runtime is not true LOCAL_MODULE := ld.config.txt diff --git a/rootdir/etc/ld.config.txt.in b/rootdir/etc/ld.config.txt.in index 401b0341b..e741a34da 100644 --- a/rootdir/etc/ld.config.txt.in +++ b/rootdir/etc/ld.config.txt.in @@ -65,7 +65,7 @@ namespace.sphal.asan.permitted.paths = /data/asan/vendor/${LIB}:/vendor/${LIB} namespace.sphal.links = default,vndk,rs # WARNING: only NDK libs can be listed here. -namespace.sphal.link.default.shared_libs = %LLNDK_LIBRARIES% +namespace.sphal.link.default.shared_libs = %LLNDK_LIBRARIES%:%SANITIZER_RUNTIME_LIBRARIES% # WARNING: only VNDK-SP libs can be listed here. DO NOT EDIT this line. namespace.sphal.link.vndk.shared_libs = %VNDK_SAMEPROCESS_LIBRARIES% @@ -90,7 +90,7 @@ namespace.rs.asan.search.paths = /data/asan/vendor/${LIB}/vndk-sp:/vendor/${LIB} namespace.rs.asan.permitted.paths = /data/asan/vendor/${LIB}:/vendor/${LIB}:/data namespace.rs.links = default,vndk -namespace.rs.link.default.shared_libs = %LLNDK_LIBRARIES% +namespace.rs.link.default.shared_libs = %LLNDK_LIBRARIES%:%SANITIZER_RUNTIME_LIBRARIES% namespace.rs.link.vndk.shared_libs = %VNDK_SAMEPROCESS_LIBRARIES% ############################################################################### @@ -109,7 +109,7 @@ namespace.vndk.asan.permitted.paths = /data/asan/vendor/${LIB}/hw:/vendor/${LIB} # to the default namespace. This is possible since their ABI is stable across # Android releases. namespace.vndk.links = default -namespace.vndk.link.default.shared_libs = %LLNDK_LIBRARIES% +namespace.vndk.link.default.shared_libs = %LLNDK_LIBRARIES%:%SANITIZER_RUNTIME_LIBRARIES% ############################################################################### # Namespace config for vendor processes. In O, no restriction is enforced for