Android CTS测试Fail项修改总结(四)

Android5.1上的测试

1、android.security.cts.SELinuxDomainTest# testInitDomain fail

打印的log

junit.framework.AssertionFailedError: Expected 1 process in SELinux domain "u:r:init:s0" Found "[pid: "1" proctitle: "/init" label: "u:r:init:s0" vsize: 1327104, pid: "298" proctitle: "/system/bin/immvibed" label: "u:r:init:s0" vsize: 1765376]" expected:<1> but was:<2> at junit.framework.Assert.fail(Assert.java:50) 

这个是典型的L 版本SELinux Test 问题.
android.security.cts.SELinuxDomainTest 有1项fail,
-- testInitDomain
junit.framework.AssertionFailedError: Expected 1 process in SELinux domain "u:r:init:s0" Found "[pid: "1" proctitle: "/init" label: "u:r:init:s0" vsize: 1327104, pid: "298" proctitle: "/system/bin/immvibed" label: "u:r:init:s0" vsize: 1765376]" expected:<1> but was:<2> at junit.framework.Assert.fail(Assert.java:50)


1.原因


其关键原因是因为 Google 强调系统关键进程的SELinux Context 必须唯一, 系统关键进程包括如 init, vold, surfaceflinger, netd, servicemanager, drmserver 等等. 一旦发现有多个process 同时使用这些关键的domain 则SELinux Test fail.


为此要求,系统关键进程启动长时间运行的process, 必须进行domain 切换. 否则将无法通过Google CTS test.

典型情况就是通过init 启动某个 service, 而没有对这个service 进行domain 切换. 比如贵司这个问题中 suntrold_32 这个 service 没有进行domain 切换, 成而无法通过测试.

2.解决方法:


下面是一个简单的demo.
情景: 定义一个init 启动的service, demo_service, 对应的执行档是/system/bin/demo.
(1). 创建一个demo.te 在/device/mediatke/common/sepolicy 目录下, 然后在/device/mediatke/common/BoardConfig.mk 的BOARD_SEPOLICY_UNION 宏中新增 demo.te
(2). 定义demo 类型,init 启动service 时类型转换, demo.te 中
type demo, domain;
type demo_exec, exec_type, file_type;
init_daemon_domain(demo)
(3). 绑定执行档 file_context 类型
/system/bin/demo u:object_r:demo_exec:s0
(4). 根据demo 需要访问的文件以及设备, 定义其它的权限在demo.te 中.

(5)最后在service下面加上seclabel u:r:demo:s0 为这个demo就是demo.te的文件名. 也是te文件中定义的type demo, domain;
这几个名字应该一致

典型情况就是通过init 启动某个 service, 而没有对这个service 进行domain 切换. 比如这个问题中immvibed 这个 service 没有进行domain 切换, 从而无法通过测试.只需按照demo修改即可.

更多相关文章

  1. 启动虚拟机出现cannot launch AVD in emulator
  2. Android(安卓)APP无法接收开机广播
  3. 【转】Android(安卓)kernel启动流程
  4. Android模拟器无法启动
  5. Android开机自动启动程序设置
  6. 图片切换
  7. RadioButton 带下划线切换的案例
  8. android 启动时会多显示一个闪现屏
  9. 修改ListView 分割线Seperator line

随机推荐

  1. Cygwin环境下使用Android(安卓)NDK r9c编
  2. # android笔记 #
  3. Android系统架构和四大组件
  4. 利用androidannotations的@Backgroud及@U
  5. android 自定义地图初步实现
  6. Media-媒介(媒体、介质)【译】
  7. Android中Button
  8. 关于android的fragment的一些说明
  9. android Gallery点击 跳到ViewFlipper全
  10. android 如何使用spinner来实现选择省份