一, 如何看问题是否与SELinux 相关?
1. 将SELinux 调整到Permissive 模式测试.
将SELinux 模式调整到Permissive 模式,然后再测试确认是否与SELinux 约束相关.
ENG 版本:
adb shell setenforce 0
如果还能复现问题,则与SELinux 无关, 如果原本很容易复现, 而Permissive mode 不能再复现, 那么就可能关系比较大.
2. 查看LOG 中是否有标准的SELinux Policy Exception.
在Kernel LOG / Main Log 中查询关键字 "avc:" 看看是否有SELinux Policy Exception, 并进一步确认这个异常是否与当时的逻辑相关.
二, 如何设置确认SELinux 模式?
1. 如何确认SELinux 模式 ?
在ENG/USER 版本中,都可以使用getenforce 命令进行查询,如:
root@mt6589_phone_720pv2:/ # getenforce
getenforce
Enforcing
2. 如何设置SELinux 模式 ?
在ENG/USERDEBUG 版本中, 可以使用setenforce 命令进行设置:
adb shell setenforce 0 //设置成permissive 模式
adb shell setenforce 1 //设置成enforce 模式
在USER 版本中无法设置.
3. 如何开机设置SELinux 模式 ?
3.1 更新配置
bootable/bootloader/lk/platform/mt6xxx/rules.mk
# choose one of following value -> 1: disabled/ 2: permissive /3: enforcing
SELINUX_STATUS := 3
可直接调整这个SELINUX_STATUS这个的值为2或者1
3.2 允许USER 版本 disable SELinux (如果你需要在USER Build 上开启)
修改system/core/init/Android.mk 新增
ifeq ($(strip $(TARGET_BUILD_VARIANT)),user)
LOCAL_CFLAGS += -DALLOW_DISABLE_SELINUX=1
Endif
4, 如何分析SELinux Policy Exception
1. SELinux Policy Exception Log 格式.
SELinux Policy Exception 的LOG 关键字是 "avc: denied" 或者 "avc: denied", 下面就是一句典型的LOG
<5>[ 27.706805] (3)[304:logd.auditd]type=1400 audit(1420041991.22