Linux多安全策略和动态安全策略框架模块代码分析报告(7)

策略库的实现

对于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()创建一个指定长度的符号表, 并对其进行初始化返回搜狐,查看更多

阅读 ()
平台声明
该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。