2.4 核心文件分析2.4.1mls.c2.4.1.1文件描述对于mls.c文件,其完整文件名为security/selinux/ss/mls.c,该文件实现了MLS策略相关操作函数。2.4.1.2主要变量及宏定义 在该文件中涉及到的主要变量为policydb,其用来表示SELinux所使用的安全策略,它是一个struct policydb类型的结构体,至于该结构体,详细分析参见2.4.1.3小节,这里不再赘述。另外,该文件频繁的调用了ebitmap_for_each_positive_bit()宏,该宏实际上是一个for循环,用于处理位图中所有设置的位。 2.4.1.3结构体定义 对于该文件中涉及到结构体,如policydb、context、mls_range、mls_level、sidtab等,详见“Linux多安全策略和动态安全策略框架机制模块代码分析报告”一文,这里不再赘述。 2.4.1.4外部函数 对于该文件涉及的外部函数功能,详见“Linux多安全策略和动态安全策略框架机制模块代码分析报告”一文,这里不再赘述。 2.4.1.5内部函数 对于该文件中定义的各内部函数,其解释如下所示: ①mls_compute_context_len() 函数原型:int mls_compute_context_len(struct context*context); 参数含义:context表示待计算的安全上下文。 函数功能:计算字符串形式的安全上下文中MLS域的长度。 返回值:成功执行时返回MLS域的字节长度;反之返回0。 ②mls_sid_to_context() 函数原型:void mls_sid_to_context(struct context*context,char **scontext); 参数含义:context表示待操作的安全上下文;scontext用于存放表示安全上下文的字符串。 函数功能:将参数context中代表MLS域的字符串拷贝到scontext中。 返回值:无。 ③mls_level_isvalid() 函数原型:int mls_level_isvalid(struct policydb*p, struct mls_level*l); 参数含义:p表示SELinux所使用的策略库;l表示待检查的安全级别。 函数功能:根据指定的安全策略判断安全级别是否有效。 返回值:,若有效,返回真;反之返回假。 ④mls_range_isvalid() 函数原型:int mls_range_isvalid(struct policydb*p, struct mls_range*r); 参数含义:p表示SELinux所使用的策略库;r表示待检查的安全域。 函数功能:判断安全上下文中的MLS域是否有效。 返回值:若有效则返回真;反之返回假。 ⑤mls_context_isvalid() 函数原型:int mls_context_isvalid(struct policydb*p, struct context*c); 参数含义:p表示SELinux所使用的策略库;c表示待检查的安全上下文结构。 函数功能:根据指定的安全策略判断安全上下文中的MLS域是否有效。 返回值:若有效则返回真。 ⑥mls_context_to_sid() 函数原型:int mls_context_to_sid(struct policydb*pol,char oldc,char **scontext, struct context*context,struct sidtab*s,u32def_sid); 参数含义:pol表示SELinux所使用的策略库;oldc表示scontext中是否设置了MLS域;scontext用于存放字符串形式的安全上下文;context表示待修改的安全上下文;s表示相应的SID表;def_sid表示默认的SID。 函数功能:根据scontext字符串设置参数context指定的安全上下文结构体中的MLS域。 返回值:成功时返回0;失败时返回相应的错误码。 ⑦mls_from_string() 函数原型:int mls_from_string(char *str, struct context*context, gfp_tgfp_mask); 参数含义:str表示修改之后的值;context表示相应的安全上下文;gfp_mask表示内存分配的标志。 函数功能:根据字符串str设置context安全上下文中的MLS域。 返回值:成功时返回0;失败时返回相应的错误码。 ⑧mls_range_set() 函数原型:int mls_range_set(struct context*context,struct mls_range*range); 参数含义:context表示待修改的安全上下文;range表示待设置的安全域的值。 函数功能:将参数range指定的安全域拷贝到相应的安全上下文结构体中。 返回值:成功时返回0;失败时返回相应的错误码。 ⑨mls_setup_user_range() 函数原型:int mls_setup_user_range(struct context*fromcon, struct user_datum*user, 参数含义:fromcon表示修改之前的安全上下文;user表示表示用户的属性;usercon表示用户的安全上下文。 函数功能:根据指定的参数修改用户安全上下文中的安全级别的相关信息。 返回值:成功时返回0;失败时返回相应的错误码。 ⑩mls_convert_context() 函数原型:int mls_convert_context(struct policydb*oldp,struct policydb*newp, 参数含义:oldp表示旧的策略库;newp表示新的策略库;c表示待修改的安全上下文。 函数功能:将安全上下文结构体c中的MLS域由oldp中指定的值转换为newp中指定的值。 返回值:成功时返回0;失败时返回相应的错误码。 mls_compute_sid() 函数原型:intmls_compute_sid(struct context*scontext, struct context*tcontext,u16tclass, u32specified,struct context*newcontext,boolsock); 参数含义:scontext表示源安全上下文;tcontext表示目标安全上下文;tclass表示客体类别;specified表示访问向量的类型;newcontext表示新生成的安全上下文;sock表示一个标志。 函数功能:根据访问向量的类型来设置新的安全上下文中的安全级别。 返回值:成功时返回0;失败时返回相应的错误码。 mls_export_netlbl_lvl() 函数原型:void mls_export_netlbl_lvl(struct context*context, struct netlbl_lsm_secattr*secattr); 参数含义:context表示一个安全上下文;secattr表示网络标记安全属性。 函数功能:将MLS的敏感级别导出到网络标记中。 返回值:无。 mls_import_netlbl_lvl() 函数原型:void mls_import_netlbl_lvl(struct context*context, struct netlbl_lsm_secattr*secattr); 参数含义:context表示一个安全上下文;secattr表示网络标记安全属性。 函数功能:将网络标记的MLS敏感级别拷贝到安全上下文中。 返回值:无。 mls_export_netlbl_cat() 函数原型:int mls_export_netlbl_cat(struct context*context, struct netlbl_lsm_secattr*secattr); 参数含义:context表示一个安全上下文;secattr表示网络标记安全属性。 函数功能:拷贝安全上下文中的低MLS类别到网络标记的MLS类别域中。 返回值:成功时返回0;失败时返回相应的错误码。 mls_import_netlbl_cat() 函数原型:int mls_import_netlbl_cat(struct context*context, struct netlbl_lsm_secattr*secattr); 参数含义:context表示一个安全上下文;secattr表示网络标记安全属性。 函数功能:拷贝网络标记的安全属性到selinux的安全上下文中。 返回值:成功时返回0;失败时返回相应的错误码。 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|