diff --git a/Android.mk b/Android.mk index ccddace19f315e7ef39e5211446e92347a02637c..c40d7a0107883e2bda6eb1e18dfb1686ed14e61b 100644 --- a/Android.mk +++ b/Android.mk @@ -100,14 +100,20 @@ $(warning Be careful when using the SELINUX_IGNORE_NEVERALLOWS flag. \ NEVERALLOW_ARG := -N endif -# BOARD_SEPOLICY_DIRS was used for vendor sepolicy customization before. -# It has been replaced by BOARD_VENDOR_SEPOLICY_DIRS. BOARD_SEPOLICY_DIRS is -# still allowed for backward compatibility, which will be merged into -# BOARD_VENDOR_SEPOLICY_DIRS. +# BOARD_SEPOLICY_DIRS was used for vendor/odm sepolicy customization before. +# It has been replaced by BOARD_VENDOR_SEPOLICY_DIRS (mandatory) and +# BOARD_ODM_SEPOLICY_DIRS (optional). BOARD_SEPOLICY_DIRS is still allowed for +# backward compatibility, which will be merged into BOARD_VENDOR_SEPOLICY_DIRS. ifdef BOARD_SEPOLICY_DIRS BOARD_VENDOR_SEPOLICY_DIRS += $(BOARD_SEPOLICY_DIRS) endif +ifdef BOARD_ODM_SEPOLICY_DIRS +ifneq ($(PRODUCT_SEPOLICY_SPLIT),true) +$(error PRODUCT_SEPOLICY_SPLIT needs to be true when using BOARD_ODM_SEPOLICY_DIRS) +endif +endif + platform_mapping_file := $(BOARD_SEPOLICY_VERS).cil ########################################################### @@ -124,6 +130,9 @@ endef # $(1): the set of policy name paths to build build_vendor_policy = $(call build_policy, $(1), $(PLAT_VENDOR_POLICY) $(BOARD_VENDOR_SEPOLICY_DIRS)) +# Builds paths for all policy files found in BOARD_ODM_SEPOLICY_DIRS. +build_odm_policy = $(call build_policy, $(1), $(BOARD_ODM_SEPOLICY_DIRS)) + # Add a file containing only a newline in-between each policy configuration # 'contexts' file. This will allow OEM policy configuration files without a # final newline (0x0A) to be built correctly by the m4(1) macro processor. @@ -242,6 +251,16 @@ LOCAL_REQUIRED_MODULES += \ endif endif +ifdef BOARD_ODM_SEPOLICY_DIRS +LOCAL_REQUIRED_MODULES += \ + odm_sepolicy.cil \ + odm_file_contexts \ + odm_seapp_contexts \ + odm_property_contexts \ + odm_hwservice_contexts \ + odm_mac_permissions.xml +endif + include $(BUILD_PHONY_PACKAGE) ################################# @@ -554,11 +573,65 @@ vendor_policy.conf := ################################# include $(CLEAR_VARS) +# odm_policy.cil - the odm sepolicy. This needs attributization and to be combined +# with the platform-provided policy. It makes use of the reqd_policy_mask files from private +# policy and the platform public policy files in order to use checkpolicy. +LOCAL_MODULE := odm_sepolicy.cil +LOCAL_MODULE_CLASS := ETC +LOCAL_MODULE_TAGS := optional +LOCAL_PROPRIETARY_MODULE := true +LOCAL_MODULE_PATH := $(TARGET_OUT_ODM)/etc/selinux + +include $(BUILD_SYSTEM)/base_rules.mk + +odm_policy.conf := $(intermediates)/odm_policy.conf +$(odm_policy.conf): PRIVATE_MLS_SENS := $(MLS_SENS) +$(odm_policy.conf): PRIVATE_MLS_CATS := $(MLS_CATS) +$(odm_policy.conf): PRIVATE_TARGET_BUILD_VARIANT := $(TARGET_BUILD_VARIANT) +$(odm_policy.conf): PRIVATE_TGT_ARCH := $(my_target_arch) +$(odm_policy.conf): PRIVATE_TGT_WITH_ASAN := $(with_asan) +$(odm_policy.conf): PRIVATE_ADDITIONAL_M4DEFS := $(LOCAL_ADDITIONAL_M4DEFS) +$(odm_policy.conf): PRIVATE_SEPOLICY_SPLIT := $(PRODUCT_SEPOLICY_SPLIT) +$(odm_policy.conf): PRIVATE_COMPATIBLE_PROPERTY := $(PRODUCT_COMPATIBLE_PROPERTY) +$(odm_policy.conf): $(call build_policy, $(sepolicy_build_files), \ + $(PLAT_PUBLIC_POLICY) $(REQD_MASK_POLICY) $(PLAT_VENDOR_POLICY) \ + $(BOARD_VENDOR_SEPOLICY_DIRS) $(BOARD_ODM_SEPOLICY_DIRS)) + $(transform-policy-to-conf) + $(hide) sed '/dontaudit/d' $@ > $@.dontaudit + +$(LOCAL_BUILT_MODULE): PRIVATE_POL_CONF := $(odm_policy.conf) +$(LOCAL_BUILT_MODULE): PRIVATE_REQD_MASK := $(reqd_policy_mask.cil) +$(LOCAL_BUILT_MODULE): PRIVATE_BASE_CIL := $(plat_pub_policy.cil) +$(LOCAL_BUILT_MODULE): PRIVATE_VERS := $(BOARD_SEPOLICY_VERS) +$(LOCAL_BUILT_MODULE): PRIVATE_DEP_CIL_FILES := $(built_plat_cil) $(built_plat_pub_vers_cil) \ + $(built_mapping_cil) $(built_vendor_cil) +$(LOCAL_BUILT_MODULE) : PRIVATE_FILTER_CIL_FILES := $(built_plat_pub_vers_cil) $(built_vendor_cil) +$(LOCAL_BUILT_MODULE): $(HOST_OUT_EXECUTABLES)/build_sepolicy \ + $(odm_policy.conf) $(reqd_policy_mask.cil) $(plat_pub_policy.cil) \ + $(built_plat_cil) $(built_plat_pub_vers_cil) $(built_mapping_cil) $(built_vendor_cil) + @mkdir -p $(dir $@) + $(hide) $(HOST_OUT_EXECUTABLES)/build_sepolicy -a $(HOST_OUT_EXECUTABLES) build_cil \ + -i $(PRIVATE_POL_CONF) -m $(PRIVATE_REQD_MASK) -c $(CHECKPOLICY_ASAN_OPTIONS) \ + -b $(PRIVATE_BASE_CIL) -d $(PRIVATE_DEP_CIL_FILES) -f $(PRIVATE_FILTER_CIL_FILES) \ + -t $(PRIVATE_VERS) -p $(POLICYVERS) -o $@ + +built_odm_cil := $(LOCAL_BUILT_MODULE) +odm_policy.conf := +odm_policy_raw := + +################################# +include $(CLEAR_VARS) + LOCAL_MODULE := precompiled_sepolicy LOCAL_MODULE_CLASS := ETC LOCAL_MODULE_TAGS := optional LOCAL_PROPRIETARY_MODULE := true + +ifeq ($(BOARD_USES_ODMIMAGE),true) +LOCAL_MODULE_PATH := $(TARGET_OUT_ODM)/etc/selinux +else LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/etc/selinux +endif include $(BUILD_SYSTEM)/base_rules.mk @@ -568,6 +641,10 @@ all_cil_files := \ $(built_plat_pub_vers_cil) \ $(built_vendor_cil) +ifdef BOARD_ODM_SEPOLICY_DIRS +all_cil_files += $(built_odm_cil) +endif + $(LOCAL_BUILT_MODULE): PRIVATE_CIL_FILES := $(all_cil_files) $(LOCAL_BUILT_MODULE): PRIVATE_NEVERALLOW_ARG := $(NEVERALLOW_ARG) $(LOCAL_BUILT_MODULE): $(HOST_OUT_EXECUTABLES)/secilc $(all_cil_files) $(built_sepolicy_neverallows) @@ -586,7 +663,12 @@ LOCAL_MODULE := precompiled_sepolicy.plat_and_mapping.sha256 LOCAL_MODULE_CLASS := ETC LOCAL_MODULE_TAGS := optional LOCAL_PROPRIETARY_MODULE := true + +ifeq ($(BOARD_USES_ODMIMAGE),true) +LOCAL_MODULE_PATH := $(TARGET_OUT_ODM)/etc/selinux +else LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/etc/selinux +endif include $(BUILD_SYSTEM)/base_rules.mk @@ -611,6 +693,10 @@ all_cil_files := \ $(built_plat_pub_vers_cil) \ $(built_vendor_cil) +ifdef BOARD_ODM_SEPOLICY_DIRS +all_cil_files += $(built_odm_cil) +endif + $(LOCAL_BUILT_MODULE): PRIVATE_CIL_FILES := $(all_cil_files) $(LOCAL_BUILT_MODULE): PRIVATE_NEVERALLOW_ARG := $(NEVERALLOW_ARG) $(LOCAL_BUILT_MODULE): $(HOST_OUT_EXECUTABLES)/secilc $(HOST_OUT_EXECUTABLES)/sepolicy-analyze $(all_cil_files) \ @@ -654,7 +740,8 @@ $(sepolicy.recovery.conf): PRIVATE_ADDITIONAL_M4DEFS := $(LOCAL_ADDITIONAL_M4DEF $(sepolicy.recovery.conf): PRIVATE_TGT_RECOVERY := -D target_recovery=true $(sepolicy.recovery.conf): $(call build_policy, $(sepolicy_build_files), \ $(PLAT_PUBLIC_POLICY) $(PLAT_PRIVATE_POLICY) \ - $(PLAT_VENDOR_POLICY) $(BOARD_VENDOR_SEPOLICY_DIRS)) + $(PLAT_VENDOR_POLICY) $(BOARD_VENDOR_SEPOLICY_DIRS) \ + $(BOARD_ODM_SEPOLICY_DIRS)) $(transform-policy-to-conf) $(hide) sed '/dontaudit/d' $@ > $@.dontaudit ifeq ($(SELINUX_IGNORE_NEVERALLOWS),true) @@ -743,6 +830,11 @@ $(file_contexts.local.tmp): $(local_fcfiles_with_nl) $(hide) m4 -s $^ > $@ device_fc_files := $(call build_vendor_policy, file_contexts) + +ifdef BOARD_ODM_SEPOLICY_DIRS +device_fc_files += $(call build_odm_policy, file_contexts) +endif + device_fcfiles_with_nl := $(call add_nl, $(device_fc_files), $(built_nl)) file_contexts.device.tmp := $(intermediates)/file_contexts.device.tmp @@ -866,6 +958,33 @@ vendor_fcfiles_with_nl := ################################## include $(CLEAR_VARS) +LOCAL_MODULE := odm_file_contexts +LOCAL_MODULE_CLASS := ETC +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE_PATH := $(TARGET_OUT_ODM)/etc/selinux + +include $(BUILD_SYSTEM)/base_rules.mk + +odm_fc_files := $(call build_odm_policy, file_contexts) +odm_fcfiles_with_nl := $(call add_nl, $(odm_fc_files), $(built_nl)) + +$(LOCAL_BUILT_MODULE): PRIVATE_FC_FILES := $(odm_fcfiles_with_nl) +$(LOCAL_BUILT_MODULE): PRIVATE_SEPOLICY := $(built_sepolicy) +$(LOCAL_BUILT_MODULE): PRIVATE_FC_SORT := $(HOST_OUT_EXECUTABLES)/fc_sort +$(LOCAL_BUILT_MODULE): $(HOST_OUT_EXECUTABLES)/checkfc $(HOST_OUT_EXECUTABLES)/fc_sort \ +$(odm_fcfiles_with_nl) $(built_sepolicy) + @mkdir -p $(dir $@) + $(hide) m4 -s $(PRIVATE_ADDITIONAL_M4DEFS) $(PRIVATE_FC_FILES) > $@.tmp + $(hide) $< $(PRIVATE_SEPOLICY) $@.tmp + $(hide) $(PRIVATE_FC_SORT) $@.tmp $@ + +built_odm_fc := $(LOCAL_BUILT_MODULE) +odm_fc_files := +odm_fcfiles_with_nl := + +################################## +include $(CLEAR_VARS) + LOCAL_MODULE := plat_file_contexts.recovery LOCAL_MODULE_STEM := plat_file_contexts LOCAL_MODULE_CLASS := ETC @@ -890,6 +1009,19 @@ include $(BUILD_SYSTEM)/base_rules.mk $(LOCAL_BUILT_MODULE): $(built_vendor_fc) $(hide) cp -f $< $@ +################################## +include $(CLEAR_VARS) +LOCAL_MODULE := odm_file_contexts.recovery +LOCAL_MODULE_STEM := odm_file_contexts +LOCAL_MODULE_CLASS := ETC +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT) + +include $(BUILD_SYSTEM)/base_rules.mk + +$(LOCAL_BUILT_MODULE): $(built_odm_fc) + $(hide) cp -f $< $@ + ################################## include $(CLEAR_VARS) LOCAL_MODULE := plat_seapp_contexts @@ -941,6 +1073,29 @@ $(LOCAL_BUILT_MODULE): $(built_sepolicy) $(vendor_sc_files) $(HOST_OUT_EXECUTABL built_vendor_sc := $(LOCAL_BUILT_MODULE) vendor_sc_files := +################################## +include $(CLEAR_VARS) +LOCAL_MODULE := odm_seapp_contexts +LOCAL_MODULE_CLASS := ETC +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE_PATH := $(TARGET_OUT_ODM)/etc/selinux + +include $(BUILD_SYSTEM)/base_rules.mk + +odm_sc_files := $(call build_policy, seapp_contexts, $(BOARD_ODM_SEPOLICY_DIRS)) +plat_sc_neverallow_files := $(call build_policy, seapp_contexts, $(PLAT_PRIVATE_POLICY)) + +$(LOCAL_BUILT_MODULE): PRIVATE_SEPOLICY := $(built_sepolicy) +$(LOCAL_BUILT_MODULE): PRIVATE_SC_FILES := $(odm_sc_files) +$(LOCAL_BUILT_MODULE): PRIVATE_SC_NEVERALLOW_FILES := $(plat_sc_neverallow_files) +$(LOCAL_BUILT_MODULE): $(built_sepolicy) $(odm_sc_files) $(HOST_OUT_EXECUTABLES)/checkseapp $(plat_sc_neverallow_files) + @mkdir -p $(dir $@) + $(hide) grep -ihe '^neverallow' $(PRIVATE_SC_NEVERALLOW_FILES) > $@.tmp + $(hide) $(HOST_OUT_EXECUTABLES)/checkseapp -p $(PRIVATE_SEPOLICY) -o $@ $(PRIVATE_SC_FILES) $@.tmp + +built_odm_sc := $(LOCAL_BUILT_MODULE) +odm_sc_files := + ################################## include $(CLEAR_VARS) LOCAL_MODULE := plat_seapp_neverallows @@ -1023,6 +1178,34 @@ built_vendor_pc := $(LOCAL_BUILT_MODULE) vendor_pcfiles := vendor_property_contexts.tmp := +################################## +include $(CLEAR_VARS) +LOCAL_MODULE := odm_property_contexts +LOCAL_MODULE_CLASS := ETC +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE_PATH := $(TARGET_OUT_ODM)/etc/selinux + +include $(BUILD_SYSTEM)/base_rules.mk + +odm_pcfiles := $(call build_policy, property_contexts, $(BOARD_ODM_SEPOLICY_DIRS)) + +odm_property_contexts.tmp := $(intermediates)/odm_property_contexts.tmp +$(odm_property_contexts.tmp): PRIVATE_PC_FILES := $(odm_pcfiles) +$(odm_property_contexts.tmp): PRIVATE_ADDITIONAL_M4DEFS := $(LOCAL_ADDITIONAL_M4DEFS) +$(odm_property_contexts.tmp): $(odm_pcfiles) + @mkdir -p $(dir $@) + $(hide) m4 -s $(PRIVATE_ADDITIONAL_M4DEFS) $(PRIVATE_PC_FILES) > $@ + + +$(LOCAL_BUILT_MODULE): $(odm_property_contexts.tmp) $(HOST_OUT_EXECUTABLES)/property_info_checker + @mkdir -p $(dir $@) + $(hide) cp -f $< $@ + $(hide) $(HOST_OUT_EXECUTABLES)/property_info_checker $@ + +built_odm_pc := $(LOCAL_BUILT_MODULE) +odm_pcfiles := +odm_property_contexts.tmp := + ################################## include $(CLEAR_VARS) @@ -1050,6 +1233,19 @@ include $(BUILD_SYSTEM)/base_rules.mk $(LOCAL_BUILT_MODULE): $(built_vendor_pc) $(hide) cp -f $< $@ +################################## +include $(CLEAR_VARS) +LOCAL_MODULE := odm_property_contexts.recovery +LOCAL_MODULE_STEM := odm_property_contexts +LOCAL_MODULE_CLASS := ETC +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT) + +include $(BUILD_SYSTEM)/base_rules.mk + +$(LOCAL_BUILT_MODULE): $(built_odm_pc) + $(hide) cp -f $< $@ + ################################## include $(CLEAR_VARS) @@ -1181,6 +1377,33 @@ $(LOCAL_BUILT_MODULE): $(vendor_hwservice_contexts.tmp) $(built_sepolicy) $(HOST vendor_hwsvcfiles := vendor_hwservice_contexts.tmp := +################################## +include $(CLEAR_VARS) + +LOCAL_MODULE := odm_hwservice_contexts +LOCAL_MODULE_CLASS := ETC +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE_PATH := $(TARGET_OUT_ODM)/etc/selinux + +include $(BUILD_SYSTEM)/base_rules.mk + +odm_hwsvcfiles := $(call build_policy, hwservice_contexts, $(BOARD_ODM_SEPOLICY_DIRS)) + +odm_hwservice_contexts.tmp := $(intermediates)/odm_hwservice_contexts.tmp +$(odm_hwservice_contexts.tmp): PRIVATE_SVC_FILES := $(odm_hwsvcfiles) +$(odm_hwservice_contexts.tmp): PRIVATE_ADDITIONAL_M4DEFS := $(LOCAL_ADDITIONAL_M4DEFS) +$(odm_hwservice_contexts.tmp): $(odm_hwsvcfiles) + @mkdir -p $(dir $@) + $(hide) m4 -s $(PRIVATE_ADDITIONAL_M4DEFS) $(PRIVATE_SVC_FILES) > $@ + +$(LOCAL_BUILT_MODULE): PRIVATE_SEPOLICY := $(built_sepolicy) +$(LOCAL_BUILT_MODULE): $(odm_hwservice_contexts.tmp) $(built_sepolicy) $(HOST_OUT_EXECUTABLES)/checkfc $(ACP) + @mkdir -p $(dir $@) + sed -e 's/#.*$$//' -e '/^$$/d' $< > $@ + $(hide) $(HOST_OUT_EXECUTABLES)/checkfc -e -l $(PRIVATE_SEPOLICY) $@ + +odm_hwsvcfiles := +odm_hwservice_contexts.tmp := ################################## include $(CLEAR_VARS) @@ -1275,6 +1498,34 @@ $(all_vendor_mac_perms_files) vendor_mac_perms_keys.tmp := all_vendor_mac_perms_files := +################################## +include $(CLEAR_VARS) + +LOCAL_MODULE := odm_mac_permissions.xml +LOCAL_MODULE_CLASS := ETC +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE_PATH := $(TARGET_OUT_ODM)/etc/selinux + +include $(BUILD_SYSTEM)/base_rules.mk + +# Build keys.conf +odm_mac_perms_keys.tmp := $(intermediates)/odm_keys.tmp +$(odm_mac_perms_keys.tmp): PRIVATE_ADDITIONAL_M4DEFS := $(LOCAL_ADDITIONAL_M4DEFS) +$(odm_mac_perms_keys.tmp): $(call build_policy, keys.conf, $(BOARD_ODM_SEPOLICY_DIRS) $(REQD_MASK_POLICY)) + @mkdir -p $(dir $@) + $(hide) m4 -s $(PRIVATE_ADDITIONAL_M4DEFS) $^ > $@ + +all_odm_mac_perms_files := $(call build_policy, mac_permissions.xml, $(BOARD_ODM_SEPOLICY_DIRS) $(REQD_MASK_POLICY)) + +$(LOCAL_BUILT_MODULE): PRIVATE_MAC_PERMS_FILES := $(all_odm_mac_perms_files) +$(LOCAL_BUILT_MODULE): $(odm_mac_perms_keys.tmp) $(HOST_OUT_EXECUTABLES)/insertkeys.py \ +$(all_odm_mac_perms_files) + @mkdir -p $(dir $@) + $(hide) $(HOST_OUT_EXECUTABLES)/insertkeys.py -t $(TARGET_BUILD_VARIANT) -c $(TOP) $< -o $@ $(PRIVATE_MAC_PERMS_FILES) + +odm_mac_perms_keys.tmp := +all_odm_mac_perms_files := + ################################# include $(CLEAR_VARS) LOCAL_MODULE := sepolicy_tests @@ -1284,6 +1535,9 @@ LOCAL_MODULE_TAGS := tests include $(BUILD_SYSTEM)/base_rules.mk all_fc_files := $(built_plat_fc) $(built_vendor_fc) +ifdef BOARD_ODM_SEPOLICY_DIRS +all_fc_files += $(built_odm_fc) +endif all_fc_args := $(foreach file, $(all_fc_files), -f $(file)) sepolicy_tests := $(intermediates)/sepolicy_tests @@ -1334,6 +1588,9 @@ $(built_sepolicy_neverallows) $(hide) $(HOST_OUT_EXECUTABLES)/secilc -m -M true -G -c $(POLICYVERS) $(PRIVATE_NEVERALLOW_ARG) $@ -o $@ -f /dev/null all_fc_files := $(built_plat_fc) $(built_vendor_fc) +ifdef BOARD_ODM_SEPOLICY_DIRS +all_fc_files += $(built_odm_fc) +endif all_fc_args := $(foreach file, $(all_fc_files), -f $(file)) # Tests for Treble compatibility of current platform policy and vendor policy of @@ -1354,9 +1611,11 @@ endif # ($(PRODUCT_SEPOLICY_SPLIT),true) add_nl := build_vendor_policy := +build_odm_policy := build_policy := built_plat_fc := built_vendor_fc := +built_odm_fc := built_nl := built_plat_cil := built_plat_pub_vers_cil := @@ -1365,6 +1624,9 @@ built_plat_pc := built_vendor_cil := built_vendor_pc := built_vendor_sc := +built_odm_cil := +built_odm_pc := +built_odm_sc := built_plat_sc := built_precompiled_sepolicy := built_sepolicy := diff --git a/private/file_contexts b/private/file_contexts index e2d1aa7ab70cf26fd010676f97ccdb67d1958aae..c5169ff60060848755275c267bbd59770e3c1027 100644 --- a/private/file_contexts +++ b/private/file_contexts @@ -332,6 +332,17 @@ /oem(/.*)? u:object_r:oemfs:s0 +# The precompiled monolithic sepolicy will be under /odm only when +# BOARD_USES_ODMIMAGE is true: a separate odm.img is built. +/odm/etc/selinux/precompiled_sepolicy u:object_r:sepolicy_file:s0 +/odm/etc/selinux/precompiled_sepolicy\.plat_and_mapping\.sha256 u:object_r:sepolicy_file:s0 + +/(odm|vendor/odm)/etc/selinux/odm_sepolicy.cil u:object_r:sepolicy_file:s0 +/(odm|vendor/odm)/etc/selinux/odm_file_contexts u:object_r:file_contexts_file:s0 +/(odm|vendor/odm)/etc/selinux/odm_seapp_contexts u:object_r:seapp_contexts_file:s0 +/(odm|vendor/odm)/etc/selinux/odm_property_contexts u:object_r:property_contexts_file:s0 +/(odm|vendor/odm)/etc/selinux/odm_hwservice_contexts u:object_r:hwservice_contexts_file:s0 +/(odm|vendor/odm)/etc/selinux/odm_mac_permissions.xml u:object_r:mac_perms_file:s0 ############################# # Product files