高通平台基线升级时,从Android 13升级到Android 15遇到的selinux权限不生效问题分析
高通平台基线升级时,从Android 13升级到Android 15遇到的selinux权限不生效问题分析:
高通平台la.1.x基线升级到la.2.x基线遇到自己添加domain selinux权限不生效。
高通平台源代码:有qssi和vendor两部分组成,qssi是放google android的原生代码。vendor是放的高通的代码。la.1.x基线是Android 13的代码:
在la.1.x源代码的.repo/.repo/manifests目录:grep -r "system/sepolicy",可以看到qssi和vendor的system/sepolicy是共线的,即同一份代码。la.2.x基线是Android 15的代码:
在la.1.x源代码的.repo/.repo/manifests目录:grep -r "system/sepolicy",可以看到qssi是Android 15的代码,vendor是android 13的代码。比如:之前在la.1.x上创建一个自己domain “myfoo” ,在la.1.x上myfoo selinux权限是生效的,工作也是正常的。
# foo service
type myfoo, domain;
type myfoo_exec, exec_type, file_type;
init_daemon_domain(myfoo)
但,到了la.2.x基线上,qssi和vendor都已经添加了myfoo selinux相关规则,但依然报avc错误。
现象是:在selinux强制模式下,myfoo不生效;但,如果setenforce 0后进入selinux的宽容模式,myfoo却能工作。
很奇怪,即使已经添加了 Selinux 权限,并且编译未报错,但是验证还是无效。
然后,网上各种搜索和在https://source.android.google.cn/docs/security/features/selinux网页了解android上selinux的用法。
搞了5天左右修复了该问题。
写文档记录一下。原因需要修改33.0.cil和34.0.cil文件。
在qssi代码的system/sepolicy目录:
find ./ -name *.cil
修复方法:在33.0.cil和34.0.cil文件添加映射:
33.0.cil文件添加:
;; my selinux config
(typeattributeset myfoo_33_0 (myfoo))
(expandtypeattribute (myfoo_33_0) true)
(typeattributeset myfoo_exec_33_0 (myfoo_exec))
(expandtypeattribute (myfoo_exec_33_0) true)34.0.cil文件添加:
;; my selinux config
(typeattributeset myfoo_34_0 (myfoo))
(expandtypeattribute (myfoo_34_0) true)
(typeattributeset myfoo_exec_34_0 (myfoo_exec))
(expandtypeattribute (myfoo_exec_34_0) true)在老的版本的:30.0.ignore.cil 31.0.ignore.cil 33.0.ignore.cil添加myfoo和myfoo_exec
但,不要在最新的33.0.ignore.cil和34.0.ignore.cil里面添加(否则,还是报avc错误)。
*.cil和*.ignore.cil是互斥的,要么在*.cil文件里添加,要么在*.ignore.cil文件里添加。
参考文档:
https://source.android.google.cn/docs/security/features/selinux
https://source.android.google.cn/docs/security/features/selinux/customize?hl=zh_cn
https://source.android.google.cn/docs/security/features/selinux/compatibility?hl=zh_cn
https://source.android.google.cn/docs/security/features/selinux/device-policy?hl=zh_cn
https://blog.csdn.net/weixin_43229570/article/details/143617850
MTK平台中Vendor分区的Selinux权限添加
https://blog.csdn.net/it_rensheng/article/details/121691982?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-4-121691982-blog-113996970.235v43pc_blog_bottom_relevance_base9&spm=1001.2101.3001.4242.3&utm_relevant_index=6
Android SELinux 权限问题(二)—添加权限后不生效
https://blog.csdn.net/DKBDKBDKB/article/details/130112049
Android11 SELinux 添加权限后不生效
https://developer.aliyun.com/article/1489649
Android HAL深入探索(6): HIDL 添加SELinux 完整调试过程
mlstrustedsubject: 包含了所有能越过MLS检查的主体domain。
mlstrustedobject: 包含了所有能越过MLS检查的客体type。