一. devices子系统总体结构
cgroup devices子系统通过为每个cgroup维护一个设备访问权限链表管理和控制cgroup中进程对设备文件读写访问和设备文件节点创建。
从功能角度分析,devices子系统主要分为三个部分:子系统初始化接口、子系统文件接口和子系统访问控制接口。
子系统初始化接口在cgroup初始化各个子系统时被调用,功能是继承或者创建一个设备访问权限链表,标识cgroup中对各个系统设备访问权限等信息;文件接口的功能是用户进程修改cgroup目录下devices子系统配置文件内容后,更新devices子系统的配置;访问控制接口主要是检查设备的权限,该类接口提供系统访问设备文件或创建设备节点时检查操作的合法性,实现访问控制。
二. devices子系统初始化接口
devices子系统为每个cgroup维护一个设备访问权限链表管理和控制cgroup中进程对设备文件读写访问和设备文件节点创建,初始化接口在cgroup初始化devices子系统时最重要的工作就是继承或者创建访问权限链表。
2.1 数据结构和接口
devices子系统的核心数据结构是structdev_whitelist_item,具体定义如下。
该数据结构标识一个设备权限的实体,major和minor说明主次设备号,type说明设备类型,而access具体制定了该设备的访问权限。每个设备的权限实体通过list链接成链表。
另一个数据结构是struct dev_cgroup,具体定义如下。