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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/390736.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# Unity 面向对象补全计划 之 初识继承方法与多态

本文仅作学习笔记与交流,不作任何商业用途,作者能力有限,如有不足还请斧正 本系列旨在通过补全学习之后,给出任意类图都能实现并做到逻辑上严丝合缝 1.继承方法 C# & Unity 面向对象补全计划 之 继承(字段与属性&…

如何在立创EDA的PCB电路板导入logo图案

1、首先制作好logo图案,一般为公司logo图标,如下图 2、打开立创EDA的PCB文件,如下图 3、将PCB的图层切换到丝印层: 4、然后选择EDA菜单栏的放置---图片: 5、进入后点击选择图片,将logo图片导入,…

Depth Anything——强大的单目深度估计模型

概述 单目深度估计(Monocular Depth Estimation, MDE)是一项在计算机视觉领域中非常重要的技术,它旨在从单张图像中恢复出场景的三维结构。这项技术对于机器人导航、自动驾驶汽车、增强现实(AR)和虚拟现实&#xff08…

在vscode中远程连接linux进行开发

目录 引言 配置过程 1.本机安装OpenSSH 2.本机生成RSA公钥和私钥 3.将rsa公钥添加到远程linux的authorized_keys文件中 4.vscode安装Remote - SSH插件 5.在vscode中ssh连接服务器 6.在本地vscode操作远程linux文件进行开发 7.在vscode上给远程linux机器需安装插件 常…

设计模式 之 —— 抽象工厂模式

目录 什么是抽象工厂模式? 定义 特点 抽象工厂模式(java代码示例) 首先定义第一个接口 实现第一个接口的类 定义第二个接口 实现第二个接口的类 * 创建抽象工厂类 创建扩展了 AbstractFactory 的工厂类 饮料工厂 食物工厂 * 创建一个…

[Meachines] [Easy] Sense PFSense防火墙RCE

信息收集 IP AddressOpening Ports10.10.10.60TCP:80,443 $ nmap -p- 10.10.10.60 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 80/tcp open http lighttpd 1.4.35 |_http-title: Did not follow redirect to https://10.10.10.60/ |_http-server-header…

Nginx进阶-常见配置(二)

一、nginx 日志配置 nginx 日志介绍 nginx 有一个非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志, 所需日志模块 ngx_http_log_module 的支持,日志格式通过 log_format 命令来定义,日志对于统计和排错是非常有利的,下面总…

Java语言程序设计——篇十一(3)

🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳&…

[激光原理与应用-118]:电源系统的接地详解:小信号的噪声干扰优化,从良好外壳接地开始

目录 一、电路的基本原理:电流回路 1、电流回路的基本概念 2、电流回路的特性 3、电流回路的类型 4、电流回路的应用 五、电流回路的注意事项 二、交流设备的接地 1.1 概述 1、交流工作接地的定义 2、交流工作接地的作用 3、交流工作接地的规范要求 4、…

C# Unity 面向对象补全计划 之 单例模式

本文仅作学习笔记与交流,不作任何商业用途,作者能力有限,如有不足还请斧正 本系列作为七大原则和设计模式的进阶知识,看不懂没关系 了解我的专栏C#面向对象与进阶:http://t.csdnimg.cn/mIitr,尤其是关于类的那篇文章即…

jupyter支持跨机器远程访问

1. 远程访问场景 本地往往缺少GPU设备,为了让我们的代码能在有GPU设备的机器上运行,就需要在远程机器上启动jupyter notebook, 这意味着我们要在本地机器的浏览器上访问远程机器上的jupyter notebook。但是直接按ip访问会报如下错误: 因为ju…

ctfshow-web入门-sql注入(web176-web180)

目录 1、web176 2、web177 3、web178 4、web179 5、web180 1、web176 1 order by 4-- 闭合后简单判断了下字段数是 3 测试联合查询注入,存在关键字的过滤,包括 select 和 union (后面经过测试实际只过滤了 select) 大小写绕…

Star-CCM+负体积网格检查与出现原因

要使网格可用于有限体积计算,每个网格单元必须具有正体积,否则初始化过程将失败,且模拟计算无法运行。 负体积网格单元可能会以多种不同的方式出现,但必须修复或从网格中移除,才能继续执行任何后续操作。 要检查体网…

力扣hot100-二叉树

文章目录 概要二叉树的基本概念常见的二叉树类型常用的二叉树遍历二叉树的常用技巧 题目:二叉树的中序遍历方法1--递归遍历方法2--使用栈 概要 二叉树(Binary Tree)是一种树形数据结构,其中每个节点最多有两个子节点,…

docker安装与container基本使用

安装 Homebrew 的 Cask 已经支持 Docker for Mac, mac用户狂喜 brew install --cask --appdir/Applications docker其他入门用法可参考 Docker Hello World- 菜鸟教程 或网上自行搜索博客学习。本文主要记录我运行go-zero-mall用到的一些注意点。当然,gonivinck项…

本地项目提交到Gitee

在项目目录 右键 git bash here 可以在黑屏输入命令 也可以在项目里面 命令都是一样的 要排除哪些 git add . 添加所有文件 git commit -m "Initial commit" 提交到本地 git remote add origin https://gitee.com/xxxx/xxxx.git 添加远程仓库 …

【多线程】线程的五种创建方法

文章目录 线程在 Java 代码中编写多线程程序Thread 标准库 创建线程的写法1 . 继承 Thread 类代码回调函数休眠操作:sleep()抢占式执行观察线程jconsoleIDEA 内置调试器 2 . 实现 Runnable 接口代码 3. 匿名内部类创建 Thread ⼦类对象代码匿名内部类 4.匿名内部类创…

PCB设计经验——布线原则

1.连线精简——避免直角布线 导线也应看作一种元器件,有自己的电阻,电感,电容 PCB走线在直角转弯的地方,信号前后部分相互影响,导致分布电容增加,对信号上升沿和下降沿有延缓影响。从阻抗的角度来说&#…

海康笔试题

1. 2. 块设备:磁盘设备驱动、SD设备驱动 字符设备:终端设备驱动 网络设备:网络设备驱动 (1)linux操作系统驱动程序分为三大类:字符设备驱动、快设备驱动和网络设备驱动 (2)字符设…

渗透测试--DHCP饿死实验

实验拓扑 实验步骤 Router Router(config)#int f0/0 Router(config-if)#ip address 192.168.100.254 255.255.255.0 Router(config-if)#no shutdown Router(config-if)#exitRouter(config)#ip dhcp pool NAME Router(dhcp-config)#network 192.168.100.0 255.255.255.0 Route…