策略库的实现
对于SELinux所使用的规则,在内核中都是通过相应的结构体来表示的,下面主要针对这些结构体及其相关操作进行介绍。
(1) 符号表
策略规则中使用了大量的字符串,如用户名、类型名等。为了提高执行的效率,在内核策略库中使用整数值来代替这些字符串,并通过符号表来维持符号字符串与整数值之间的关系。对于符号表,其定义在security/selinux/ss/symtab.h中,具体定义如下所示:
struct symtab {
struct hashtab *table; /* hash table (keyed on a string) */
u32 nprim; /* number of primary names in table */
};
如上所示,代码中已经对各字段的含义进行了解释,这里不再赘述。由上述代码可知,符号表通过哈希表实现,其结构图如图2-2所示:

图2-2 symtab相关结构体之间的关系图
对于符号表,其相关操作如表2-6所示,这些函数定义在security/selinux/ss/symtab.c中。
表2-6 符号表相关操作说明
函数名称 函数功能
symhash() 符号表对应的哈希函数
symcmp()判断两个键值是否相等
symtab_init()创建一个指定长度的符号表, 并对其进行初始化返回搜狐,查看更多