Android13 EDLA认证 VTS vts_treble_sys_prop_test 报错

项目场景:

Android13 EDLA认证 VTS测试 vts_treble_sys_prop_test
在这里插入图片描述


问题描述

VTC 测试 vts_treble_sys_prop_test Fail ;报错log如下所示

AssertionError: 7 !=0 : properties in /vendor /etc/selinux/vendor_property_contexts have wrong Property types: 
name: persist.xxx., type: u:object_r:exported_system_prop:s0
name: sys.xxx., type: u:object_r:exported_system_prop:so 
name: ro.xxx., type: u:object_r:exported_system_prop:s0
name: xxx., type: u:object_r:exported_system_prop:s0 
name: ro.vendor.xxx., type: u:object_r:exported_system_prop:s0
name: persist.vendor.xxx., type: u:object_r:exported_system_prop:s0
name: vendor.xxx., type: u:object_r:exported_system_prop:s0

问题分析流程:

1. 按log分析,vendor_property_contexts 存在非法的SELinux 属性定义。
persist.xxx.                 u:object_r:exported_system_prop:s0
sys.xxx.                  	  u:object_r:exported_system_prop:s0
ro.xxx.             	   	  u:object_r:exported_system_prop:s0
xxx.             	   	      u:object_r:exported_system_prop:s0

以上为 exported_system_prop类型的自定义属性,在 device\amlogic\common\sepolicy\property_contexts 文件中定义。

2. 编译后发现 device\amlogic\common\sepolicy\property_contexts 下的属性定义会被写到 vendor\etc\selinux\vendor_property_contexts中
3. Google EDLA认证规定,vendor_property_contexts 中的属性定义必须为 vendor_xxx_prop类型(vendor_nfc_prop、vendor_platform_prop、vendor_default_prop等),而自定义的persist.xxx. 、persist.vendor.xxx. 等属性类型为exported_system_prop 类型导致SELinux属性非法问题 vts_treble_sys_prop_test fail。
4. 尝试将自定义的persist.xxx. 、persist.vendor.xxx. 等属性定义为 vendor_platform_prop,发现应用层无法读取自定义属性,会报 RuntimeException: failed to set system property 问题,无权限读写 system property 。
Process: com.xxx.xxxx, PID: 3978
    java.lang.RuntimeException: failed to set system property
        at android.os.SystemProperties.native_set(Native Method)
        at android.os.SystemProperties.set(SystemProperties.java:196)
5. System 层无法读写vendor_xxx_prop 类型的属性,那是不是System层的属性在别的property_contexts 下定义,带着这个疑问全局搜索了property_contexts文件发现,项目中存在多个property_contexts文件。System目录下也有对应sepolicy目录,此目录下的property_contexts文件如下图:

在这里插入图片描述

6. system/sepolicy/private/property_contexts 中发现有定义exported_system_prop 类型的属性;此目录下的属性定义在编译时会写到 out\target\product\xxx\system\etc\selinux\plat_property_contexts 目录下
persist.sys.locale       u:object_r:exported_system_prop:s0 exact string
persist.sys.timezone     u:object_r:exported_system_prop:s0 exact string
persist.sys.test_harness u:object_r:test_harness_prop:s0 exact bool
7. 将自定义属性persist.xxx. 等移植到 system/sepolicy/private/property_contexts 中,编译测试后可解决 VTS测试 vts_treble_sys_prop_test Fail问题,应用层也可以正常读写 system property

解决方案:

将 device\amlogic\common\sepolicy\property_contexts 中自定义的 exported_system_prop 类型属性 移到 system/sepolicy/private/property_contexts中 即可。

总结

1. device\amlogic\common\sepolicy\property_contexts 中定义vendor类型的属性,编译后会将属性定义写入到 vendor\etc\selinux\vendor_property_contexts中。Google要求此文件中的属性类型必须为vendor_xxx_prop类型。
2. system/sepolicy/private/property_contexts 中可定义system类型的属性,译后会将属性定义写入到 system\etc\selinux\plat_property_contexts中

仅个人经验,如有错误,欢迎指出。

  • 16
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值