问题
03-28 09:57:44.667 7326 7326 W m.sunmi.sidekey: type=1400 audit(0.0:244): avc: denied { write } for name=”property_service” dev=”tmpfs” ino=220 scontext=u:r:sunmi_app:s0:c512,c768 tcontext=u:object_r:property_socket:s0 tclass=sock_file permissive=0
原因分析
seapp_contexts 用于为应用进程和 /data/data 目录分配标签。在每次应用启动时,zygote 进程都会读取此配置;在启动期间,installd 会读取此配置。
seapp_contexts levelFrom=user 不同level的进程无法进行socket通信 //user=_app seinfo=sunmi domain=sunmi_app type=app_data_file user=_app seinfo=sunmi domain=sunmi_app type=app_data_file levelFrom=user user=_app domain=untrusted_app type=app_data_file levelFrom=user
s0 是 SELinux为了满足军用和教育行业设计的 Multi-Level Security(MLS)机制有关。MLS将进程和文件进行了分级,不同级别的资源需要不同级别的进程访问
ps -Z u:r:sunmi_app:s0 u0a69 3588 1258 990992 30876 SyS_epoll 00000000 S com.sunmi.* u:r:sunmi_app:s0:c512,c768 u0a69 3588 1258 990992 30876 SyS_epoll 00000000 S com.sunmi.*
修改方案
//sunmi_app.te type sunmi_app, domain, domain_deprecated, mlstrustedsubject; // add mlstrustedsubject
android sepolicy
device/huawei/angler/sepolicy/
编译
/device/huawei/angler/BoardConfig.mk
BOARD_SEPOLICY_DIRS += \
<root>/device/manufacturer/device-name/sepolicy
BOARD_SEPOLICY_UNION += \
genfs_contexts \
file_contexts \
sepolicy.te
编译结果
out/target/product/msm8937_32/obj/ETC/sepolicy_intermediates/policy.conf
调试
-
adb shell setenforce 0 //临时关闭selinux
-
cat /proc/kmsg grep avc //查看selinux相关log
audit2allow
external/selinux/policycoreutils/audit2allow 工具可以获取 dmesg 拒绝事件并将其转换成相应的 SELinux 政策声明。因此,该工具有助于大幅加快 SELinux 开发速度 audit2allow 包含在 Android 源代码树中,会在您基于源代码编译 Android 时自动编译
-
sudo apt install policycoreutils
-
adb root
-
adb shell “cat /proc/kmsg grep avc” > avc_log.txt - audit2allow -i avc_log.txt