问题:日志报错update_engine: type=1400 audit(0.0:371): avc: denied { read } for name="mmcblk0p17" dev="tmpfs" ino=17516 scontext=u:r:update_engine:s0 tcontext=u:object_r:block_device:s0 tclass=blk_file permissive=0
根据日志在update_engine.te中添加avc权限:
allow update_engine block_device:blk_file { read write open ioctl getattr };
整编报错:
neverallow { domain -kernel -init -recovery } block_device:blk_file { open read write };
分析:selinux权限为了防止文件节点权限范围被随便使用,使用neverallow约束,下面就通过上面日志的错误提示来解决。
u:object_r:block_device:s0中对应的文件路径
/dev/block(/.*)? u:object_r:block_device:s0
adb shell查看后mmcblk0p17文件存在/dev/block/mmcblk0p17,所以上面avc错误中block_device标签实际使用的是name="mmcblk0p17",下面给/dev/block/mmcblk0p17文件添加selinux权限,根据block_device进行配置:
路径aosp/device/mediatek/sepolicy/basic/non_plat
device.te:
type block_device, dev_type, bdev_type;
type block_mmcblk0p17, dev_type, bdev_type;
file_contexts:
/dev/block(/.*)? u:object_r:block_device:s0
/dev/block/mmcblk0p17 u:object_r:block_mmcblk0p17:s0
update_engine.te:
allow update_engine block_mmcblk0p17:blk_file { read write open ioctl getattr };
编译验证