MTK Android12 分析system_app允许vendor_mtk_audiohal_prop SELinux 权限问题
创始人
2024-11-12 14:08:47
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 属性在不同规则类型下的效果。由于规则类型定义的冲突,需要仔细选择适当的规则类型,确保属性在系统和供应商环境中的正确使用。

相关内容

热门资讯

黑科技辅助挂(智星德州)外挂软... 黑科技辅助挂(智星德州)外挂软件透明挂(ai代打)果然真的有挂(2023已更新)(小红书)1、用户打...
aapoker辅助工具(来玩德... aapoker辅助工具(来玩德州app)德扑之星好牌(辅助挂)都是真的有挂(有挂外挂)-今日头条1、...
7分钟理解!德扑之星可以设置埋... 7分钟理解!德扑之星可以设置埋牌(软件透明挂)外挂透明挂辅助脚本(2024已更新)(今日头条)德扑之...
透明辅助挂(wEpoKe)外挂... 透明辅助挂(wEpoKe)外挂辅助APP(智能ai代打)原来真的有挂(2023已更新)(微博客户端)...
微扑克游戏辅助器(德州wepo... 微扑克游戏辅助器(德州wepower)hm3德州辅助怎么购买(透明黑科技)好像真的有挂(有挂机器人)...
七分钟了解!wpk有辅助挂(黑... 七分钟了解!wpk有辅助挂(黑科技)外挂透明挂辅助APP(2025已更新)(今日头条)1、下载好wp...
透明辅助挂(AAPOKeR)外... 透明辅助挂(AAPOKeR)外挂辅助工具(智能ai代打)本来真的有挂(2025已更新)(今日头条);...
德州之星辅助(扑克王)德扑手机... 德州之星辅助(扑克王)德扑手机上算胜率的软件(透明黑科技)总是真的有挂(有挂app)-抖音一、德州之...
四分钟实锤!德州ai辅助代理(... 四分钟实锤!德州ai辅助代理(透视)外挂透明挂辅助安装(2021已更新)(小红书);1、许多玩家不知...
wpk辅助(poker mas... wpk辅助(poker master安卓版)软件透明挂辅助APP(透视辅助)果真真的有挂(2020已...