MTK Android12 分析system_app允许vendor_mtk_audiohal_prop SELinux 权限问题

avatar
作者
筋斗云
阅读量:0

本文将尝试分析,在开发 Android 12 MTK 平台时遇到了 vendor_mtk_audiohal_prop 属性相关的 SELinux 权限问题。包括如何修改 SELinux 策略以允许 system_app 设置 vendor_mtk_audiohal_prop 属性。

问题描述

希望允许 system_app 设置 vendor_mtk_audiohal_prop 属性,但在编译时遇到了 neverallow 规则的限制和属性类型定义冲突的问题。

遇到的问题及解决方案

问题1:属性类型定义冲突

vendor_mtk_audiohal_prop 属性被同时定义为 vendor_restricted_propsystem_internal_prop,导致属性类型定义冲突。

FAILED: out/target/product/projectname/obj/FAKE/sepolicy_neverallows_intermediates/sepolicy_neverallows /bin/bash -c "(ASAN_OPTIONS=detect_leaks=0 out/host/linux-x86/bin/checkpolicy -M -c 		30 -o out/target/product/projectname/obj/FAKE/sepolicy_neverallows_intermediates/sepolicy_neverallows.tmp out/target/product/projectname/obj/FAKE/sepolicy_neverallows_intermediates/policy.conf ) && (out/host/linux-x86/bin/sepolicy-analyze out/target/product/projectname/obj/FAKE/sepolicy_neverallows_intermediates/sepolicy_neverallows.tmp neverallow -w -f out/target/product/projectname/obj/FAKE/sepolicy_neverallows_intermediates/policy_2.conf || 	  ( echo \"\" 1>&2; 	    echo \"sepolicy-analyze failed. This is most likely due to the use\" 1>&2; 	    echo \"of an expanded attribute in a neverallow assertion. Please fix\" 1>&2; 	    echo \"the policy.\" 1>&2; 	    exit 1 ) ) && (touch out/target/product/projectname/obj/FAKE/sepolicy_neverallows_intermediates/sepolicy_neverallows.tmp ) && (mv out/target/product/projectname/obj/FAKE/sepolicy_neverallows_intermediates/sepolicy_neverallows.tmp out/target/product/projectname/obj/FAKE/sepolicy_neverallows_intermediates/sepolicy_neverallows )" device/mediatek/sepolicy/basic/non_plat/property.te:39:ERROR 'Duplicate declaration of type' at token ';' on line 94212:   type vendor_mtk_audiohal_prop, property_type, vendor_property_type, vendor_restricted_property_type; #line 39 checkpolicy:  error(s) encountered while parsing configuration 17:41:49 ninja failed with: exit status 1  
问题2:neverallow 规则限制

neverallow 规则限制了 system_appvendor_mtk_audiohal_prop 属性的设置操作。

学习和发现

在解决这些问题的过程中,进行了多次尝试和分析,并总结了以下几点。

1. 修改 system_app.te 文件

device/mediatek/sepolicy/basic/non_plat/system_app.te 文件中增加了以下内容:

set_prop(system_app, vendor_mtk_audiohal_prop) 

会生成以下内容:

# policy.conf文件就会生成下面这么多内容   #line 239  #line 239 allow factory property_socket:sock_file write; #line 239 allow factory init:unix_stream_socket connectto; #line 239  #line 239 allow factory vendor_mtk_audiohal_prop:property_service set; #line 239  #line 239 allow factory vendor_mtk_audiohal_prop:file { getattr open read map }; #line 239  #line 239  

在这里插入图片描述

2. 修改 property.te 文件

device/mediatek/sepolicy/basic/non_plat/property.te 文件中,增加以下内容:

vendor_restricted_prop(vendor_mtk_audiohal_prop) 

这会导致生成如下内容:

sepolicy_neverallows_intermediates/policy.conf.dontaudit:93689:  type vendor_mtk_audiohal_prop, property_type, vendor_property_type, vendor_restricted_property_type; sepolicy_neverallows_intermediates/policy_2.conf:92231:  type vendor_mtk_audiohal_prop, property_type, system_property_type, system_public_property_type; sepolicy_neverallows_intermediates/policy_2.conf.dontaudit:91714:  type vendor_mtk_audiohal_prop, property_type, system_property_type, system_public_property_type; sepolicy_neverallows_intermediates/policy.conf:93953:  type vendor_mtk_audiohal_prop, property_type, system_property_type, system_public_property_type; 
3. 尝试添加 system_internal_prop 定义

为了使 vendor_mtk_audiohal_prop 属性在系统中也能使用,尝试在 property.te 文件中增加:

system_internal_prop(vendor_mtk_audiohal_prop) 

这会生成以下内容:

sepolicy_neverallows_intermediates/policy.conf.dontaudit:93684:  type vendor_mtk_audiohal_prop, property_type, vendor_property_type, vendor_restricted_property_type; sepolicy_neverallows_intermediates/policy_2.conf:92479:  type vendor_mtk_audiohal_prop, property_type, vendor_property_type, vendor_restricted_property_type; sepolicy_neverallows_intermediates/policy_2.conf.dontaudit:91962:  type vendor_mtk_audiohal_prop, property_type, vendor_property_type, vendor_restricted_property_type; sepolicy_neverallows_intermediates/policy.conf:94201:  type vendor_mtk_audiohal_prop, property_type, vendor_property_type, vendor_restricted_property_type; 

在这里插入图片描述

4. 冲突的定义

在尝试同时定义 vendor_mtk_audiohal_propsystem_internal_propvendor_restricted_prop 时,会出现冲突:

device/mediatek/sepolicy/basic/non_plat/property.te:39:ERROR 'Duplicate declaration of type' at token ';' on line 96691: #line 39   type vendor_mtk_audiohal_prop, property_type, vendor_property_type, vendor_restricted_property_type; checkpolicy:  error(s) encountered while parsing configuration 
5. 生成的策略文件

/out/target/product/projectname/obj/FAKE/sepolicy_neverallows_intermediates/policy.conf 文件中搜索 vendor_mtk_audiohal_prop,会发现以下定义:

sepolicy_neverallows_intermediates/policy.conf.dontaudit:93436:  type vendor_mtk_audiohal_prop, property_type, system_property_type, system_public_property_type; sepolicy_neverallows_intermediates/policy.conf.dontaudit:93689:  type vendor_mtk_audiohal_prop, property_type, vendor_property_type, vendor_restricted_property_type; sepolicy_neverallows_intermediates/policy_2.conf:92231:  type vendor_mtk_audiohal_prop, property_type, system_property_type, system_public_property_type; sepolicy_neverallows_intermediates/policy_2.conf:92484:  type vendor_mtk_audiohal_prop, property_type, vendor_property_type, vendor_restricted_property_type; sepolicy_neverallows_intermediates/policy_2.conf.dontaudit:91714:  type vendor_mtk_audiohal_prop, property_type, system_property_type, system_public_property_type; sepolicy_neverallows_intermediates/policy_2.conf.dontaudit:91967:  type vendor_mtk_audiohal_prop, property_type, vendor_property_type, vendor_restricted_property_type; sepolicy_neverallows_intermediates/policy.conf:93953:  type vendor_mtk_audiohal_prop, property_type, system_property_type, system_public_property_type; sepolicy_neverallows_intermediates/policy.conf:94206:  type vendor_mtk_audiohal_prop, property_type, vendor_property_type, vendor_restricted_property_type; 

MTK Policy Rule 解释

以下是不同属性类型的解释以及如果 vendor_mtk_audiohal_prop 添加这些属性类型的效果:

1. system_internal_prop
  • 用途:用于 /system 中的属性。
  • 效果vendor_mtk_audiohal_prop 只能在 /system 分区内部使用。
  • 定义
system_internal_prop(vendor_mtk_audiohal_prop) 
  • 生成内容
type vendor_mtk_audiohal_prop, property_type, system_property_type, system_internal_property_type; 
2. system_restricted_prop
  • 用途:在系统中使用,但不能被系统外部写入的属性。
  • 效果vendor_mtk_audiohal_prop 只能在系统内部写入,外部进程不能修改。
  • 定义
system_restricted_prop(vendor_mtk_audiohal_prop) 
  • 生成内容
type vendor_mtk_audiohal_prop, property_type, system_property_type, system_restricted_property_type; 
3. system_public_prop
  • 用途:没有任何访问限制的属性。
  • 效果vendor_mtk_audiohal_prop 可以被系统中的任何进程读取或写入。
  • 定义
system_public_prop(vendor_mtk_audiohal_prop) 
  • 生成内容
type vendor_mtk_audiohal_prop, property_type, system_property_type, system_public_property_type; 
4. system_vendor_config_prop
  • 用途:只能由 vendor_init 写入的属性。
  • 效果vendor_mtk_audiohal_prop 只能被 vendor_init 进程写入。
  • 定义
system_vendor_config_prop(vendor_mtk_audiohal_prop) 
  • 生成内容
type vendor_mtk_audiohal_prop, property_type, system_property_type, system_vendor_config_property_type; 
5. vendor_internal_prop
  • 用途:仅用于 /vendor 中的属性。
  • 效果vendor_mtk_audiohal_prop 只能在 /vendor 分区内部使用。
  • 定义
vendor_internal_prop(vendor_mtk_audiohal_prop) 
  • 生成内容
type vendor_mtk_audiohal_prop, property_type, vendor_property_type, vendor_internal_property_type; 
6. vendor_restricted_prop
  • 用途:在 vendor 中使用,但不能被 vendor 外部写入的属性。
  • 效果vendor_mtk_audiohal_prop 只能在 vendor 内部写入,外部进程不能修改。
  • 定义
vendor_restricted_prop(vendor_mtk_audiohal_prop) 
  • 生成内容
type vendor_mtk_audiohal_prop, property_type, vendor_property_type, vendor_restricted_property_type; 
7. vendor_public_prop
  • 用途:没有任何访问限制的 vendor 属性。
  • 效果vendor_mtk_audiohal_prop 可以被 vendor 分区中的任何进程读取或写入。
  • 定义
vendor_public_prop(vendor_mtk_audiohal_prop) 
  • 生成内容
type vendor_mtk_audiohal_prop, property_type, vendor_property_type, vendor_public_property_type; 

结论

通过分析和实验,了解了 vendor_mtk_audiohal_prop 属性在不同规则类型下的效果。由于规则类型定义的冲突,需要仔细选择适当的规则类型,确保属性在系统和供应商环境中的正确使用。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!