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 属性在不同规则类型下的效果。由于规则类型定义的冲突,需要仔细选择适当的规则类型,确保属性在系统和供应商环境中的正确使用。

相关内容

热门资讯

第七分钟知晓!aapoker透... 第七分钟知晓!aapoker透视怎么用,aapoker俱乐部靠谱吗(透视)详细教程(确实有挂)1.a...
热点推荐!微扑克有脚本,wop... 热点推荐!微扑克有脚本,wopoker游戏辅助器,透明挂教程(有挂规律)-哔哩哔哩;人气非常高,ai...
5分钟指导!安装不了wepok... 5分钟指导!安装不了wepoker,德普之星透视辅助ios(透视)2025版教程(有挂规律)1、德普...
黑科技存在!德扑之星隐藏功能,... 黑科技存在!德扑之星隐藏功能,微扑克辅助钻石,安装教程(有挂教程)-哔哩哔哩;致您一封信;亲爱德扑之...
五分钟俱乐部!aapoker透... 五分钟俱乐部!aapoker透视脚本入口,wepoker私人辅助器(透视)攻略方法(有挂技巧)亲,关...
玩家爆料!微扑克必胜技巧,微扑... 玩家爆料!微扑克必胜技巧,微扑克辅助是真的,揭秘教程(有挂教程)-哔哩哔哩;亲,有的,ai轻松简单,...
五分钟熟悉!智星德州菠萝插件官... 五分钟熟悉!智星德州菠萝插件官网,hhpoker透视脚本(透视)可靠教程(有挂攻略)1、智星德州菠萝...
来一盘!wepoke有辅助挂,... 来一盘!wepoke有辅助挂,wpk发牌逻辑,科技教程(今日头条)-哔哩哔哩;wepoke有辅助挂A...
第六分钟领会!wepoker挂... 第六分钟领会!wepoker挂,wepoker辅助器下载(透视)力荐教程(存在有挂)1、wepoke...
插件辅助挂!微扑克代打,德州之... 插件辅助挂!微扑克代打,德州之星辅助器多少钱,wepoke教程(有挂工具)-哔哩哔哩;1、让任何用户...