问题描述
SELinux : avc: denied { add } for service=xxxManagerService pid=3798 uid=1000 scontext=u:r:system_server:s0 tcontext=u:object_r:default_android_service:s0 tclass=service_manager permissive=0
allow system_server default_android_service:service_manager { add };
但是发生构建错误:
libsepol.report_failure: neverallow on line 517 of system/sepolicy/public/domain.te (or line 10355 of policy.conf) violated by allow system_server default_android_service:service_manager { add };
libsepol.check_assertions: 1 neverallow failures occurred
Error while expanding policy
out/host/linux-x86/bin/checkpolicy: loading policy configuration from out/target/product/sti6030d111/obj/ETC/sepolicy_neverallows_intermediates/policy.conf
[ 11% 22/200] target thumb C++: libpqcontrol <= vendor/amlogic/common/frameworks/services/systemcontrol/PQ/SSMAction.cpp
我应该怎么做才能通过cts。
解决方法
Android随附一长串neverallow
规则,可确保您不授予会破坏设备安全性的权限。幸运的是,这些neverallow
规则已在代码中得到了很好的记录。如果您在system/sepolicy/public/domain.te
中查找第517行,则会发现以下内容:
不允许service_manager添加默认服务标签。 相反,域应使用更具体的类型,例如 system_app_service而不是通用类型。 在{,hw,vnd} service.te中定义了新的service_types和新的映射 在{,hw,vnd} service_contexts中定义了从服务名称到service_type的所有内容。
您可能使用了audit2allow
来创建规则。起初这似乎是一个简单的解决方案,但几乎总会导致难以理解的规则集。最后,除了了解Android SELinux的基础之外,别无他法。
有关更多信息,请参见here。
由于您需要做的事情取决于您要添加的服务类型,因此我无法为您提供示例。