小编Dmi*_*yF.的帖子

SELinux规则适用于Android中的sysfs中的i2c文件

我为我的一个I2C设备创建了内核驱动程序作为可加载模块.驱动程序(/sys/devices/i2c/i2c-0/0-0008/)通过new_device文件实例化在I2C对应文件夹下创建少量sysfs 文件(/sys/devices/i2c/i2c-0/new_device).

Lollipop强制执行SELinux所以我需要为需要访问设备的sysfs文件的应用程序创建规则.主要是系统应用程序(它们属于Android SELinux中platform_app的定义).问题是不允许任何应用程序域中的应用程序写入sysfs文件:

neverallow { appdomain -bluetooth -nfc }
    sysfs:dir_file_class_set write;
Run Code Online (Sandbox Code Playgroud)

所以我决定专门为我的设备创建文件上下文:

file_context:

/sys/devices/i2c-0/0-0008(/.*)?                     u:object_r:sysfs_mydeviceic:s0
Run Code Online (Sandbox Code Playgroud)

结果很有趣:默认驱动程序文件和文件夹(如name和uevent等)获取正确的上下文,但不是由I2C驱动程序的sysfs部分创建的文件:

root@android:/sys/devices/i2c-0/0-0008 # ls -Z
--w--w--w- root     root              u:object_r:sysfs:s0 data
lrwxrwxrwx root     root              u:object_r:sysfs_mydeviceic:s0 driver -> ../../../bus/i2c/drivers/mydevice
-rw-rw-rw- root     root              u:object_r:sysfs:s0 locked
-r--r--r-- root     root              u:object_r:sysfs_mydeviceic:s0 modalias
-r--r--r-- root     root              u:object_r:sysfs_mydeviceic:s0 name
drwxr-xr-x root     root              u:object_r:sysfs_mydeviceic:s0 power
-rw-rw-rw- root     root              u:object_r:sysfs:s0 protection
-rw-rw-rw- root     root              u:object_r:sysfs:s0 state
lrwxrwxrwx root     root              u:object_r:sysfs_mydeviceic:s0 subsystem -> ../../../bus/i2c
-rw-r--r-- root     root              u:object_r:sysfs_mydeviceic:s0 uevent
Run Code Online (Sandbox Code Playgroud)

我正在寻求帮助如何解决这个问题:如果我仍然希望将sysfs上下文转换为sysfs_mydeviceic以获取其余文件,那么如何做到这一点?或者是否有其他方法可以让应用程序写入sysfs文件?

android selinux i2c linux-kernel sysfs

7
推荐指数
1
解决办法
1685
查看次数

标签 统计

android ×1

i2c ×1

linux-kernel ×1

selinux ×1

sysfs ×1