SELINUX报错问题处理

报错日志

- ['add ', 'u:object_r:default_android_service:s0', '01-01 00:00:25.425   334   334 E SELinux : avc:  denied  { add } for pid=1709 uid=1000 name=xxxxxxx_2nd_manager scontext=u:r:system_server:s0 tcontext=u:object_r:default_android_service:s0 tclass=service_manager permissive=1']
- ['find ', 'u:object_r:default_android_service:s0', '01-01 00:00:25.825   334   334 E SELinux : avc:  denied  { find } for pid=1709 uid=1000 name=CxxxxxService scontext=u:r:system_server:s0 tcontext=u:object_r:default_android_service:s0 tclass=service_manager permissive=1']
- ['find ', 'u:object_r:xx_powermoding_hwservice:s0', '09-29 18:34:16.760   335   335 E SELinux : avc:  denied  { find } for interface=vendor.xx.powermode::IPowerModing sid=u:r:system_server:s0 pid=1709 scontext=u:r:system_server:s0 tcontext=u:object_r:xx_powermoding_hwservice:s0 tclass=hwservice_manager permissive=1']

上面报错的处理方法:

在.te文件(这里是system_server.te,一般都能找到同名的te文件)中添加

allow system_server default_android_service:service_manager { add find  };

allow system_server xx_powermoding_hwservice:hwservice_manager find;

*注意上面语句中,scontext,tcontext和tclass的位置。

有时候allow会和其它文件里的disallow冲突,这时编译(make selinux_policy)会报错,并打印出冲突的位置(精确到某个文件的某一行)。此时可以使用dontaudit替代allow或者去掉disallow的冲突代码。

如果scontext和tcontext相同,tcontext可以用self代替

如allow xxx self:yyy { zzz };

编译完成后,推包验证。如果使用的是make selinux_policy,system和vendor目录都有产物。产物目录里,除了.cil文件以外,还有很多contexts结尾的文件,需要把整个文件夹push进去验证。

selinux的目录,下面以原生的logd为例。修改logd的selinux权限,需要修改/system/sepolicy目录下public/logd.te以及(如果是安卓12,对应API 32)/prebuilts/api/32.0/public/logd.te

调试selinux时,可以setenforce 0 关闭selinux检查,这样只会有selinux的权限报错,但实际没有拦截,不影响实际功能。此时报错的结尾permissive=1。而selinux权限拦截生效时,结尾permissive=0.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值