From 2cfce9380e5b8a6874d74abd3074ef0676ffcf1c Mon Sep 17 00:00:00 2001 From: Martin Stjernholm Date: Fri, 25 Sep 2020 17:13:38 +0100 Subject: [PATCH] Do not chmod the symlink target when a prebuilt binary is symlinked. It may be in a source tree that isn't writable. Instead check that the target is executable. Test: m Test: chmod a-x system/sepolicy/tools/insertkeys.py && \ rm -rf out/host out/soong/host && \ m insertkeys.py Check that it fails with the expected error message. Fixes: 169375644 Change-Id: I402d029dba45783127586ad9749c90012afe891d --- core/soong_cc_prebuilt.mk | 7 +++++-- core/soong_rust_prebuilt.mk | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/core/soong_cc_prebuilt.mk b/core/soong_cc_prebuilt.mk index a0315a542..f98253d80 100644 --- a/core/soong_cc_prebuilt.mk +++ b/core/soong_cc_prebuilt.mk @@ -149,11 +149,14 @@ endif $(LOCAL_BUILT_MODULE): $(LOCAL_PREBUILT_MODULE_FILE) ifeq ($(LOCAL_IS_HOST_MODULE) $(if $(filter EXECUTABLES SHARED_LIBRARIES NATIVE_TESTS,$(LOCAL_MODULE_CLASS)),true,),true true) $(copy-or-link-prebuilt-to-target) + ifneq ($(filter EXECUTABLES NATIVE_TESTS,$(LOCAL_MODULE_CLASS)),) + [ -x $@ ] || $(call echo-error,$@,Target of symlink is not executable) + endif else $(transform-prebuilt-to-target) -endif -ifneq ($(filter EXECUTABLES NATIVE_TESTS,$(LOCAL_MODULE_CLASS)),) + ifneq ($(filter EXECUTABLES NATIVE_TESTS,$(LOCAL_MODULE_CLASS)),) $(hide) chmod +x $@ + endif endif ifndef LOCAL_IS_HOST_MODULE diff --git a/core/soong_rust_prebuilt.mk b/core/soong_rust_prebuilt.mk index b54f300ff..2f4c6e762 100644 --- a/core/soong_rust_prebuilt.mk +++ b/core/soong_rust_prebuilt.mk @@ -59,11 +59,14 @@ endif $(LOCAL_BUILT_MODULE): $(LOCAL_PREBUILT_MODULE_FILE) ifeq ($(LOCAL_IS_HOST_MODULE) $(if $(filter EXECUTABLES SHARED_LIBRARIES NATIVE_TESTS,$(LOCAL_MODULE_CLASS)),true,),true true) $(copy-or-link-prebuilt-to-target) + ifneq ($(filter EXECUTABLES NATIVE_TESTS,$(LOCAL_MODULE_CLASS)),) + [ -x $@ ] || $(call echo-error,$@,Target of symlink is not executable) + endif else $(transform-prebuilt-to-target) -endif -ifneq ($(filter EXECUTABLES NATIVE_TESTS,$(LOCAL_MODULE_CLASS)),) + ifneq ($(filter EXECUTABLES NATIVE_TESTS,$(LOCAL_MODULE_CLASS)),) $(hide) chmod +x $@ + endif endif ifndef LOCAL_IS_HOST_MODULE