SEAndroid kernel 源码解析1–从hook点到策略点
http://blog.csdn.net/mrhare/article/details/71215391
从hook 点重定向到策略执行函数后,执行avc_has_perm 进行权限检查(还是以socket_create为例)
*/goldfish/security/selinux/avc.c
int avc_has_perm(u32 ssid, u32 tsid, u16 tclass,
u32 requested, struct avc_audit_data *auditdata)
{
struct av_decision avd;
int rc;
//进行策略检查,检查结果写入到avd中
rc = avc_has_perm_noaudit(ssid, tsid, tclass, requested, 0, &avd);
//audit
avc_audit(ssid, tsid, tclass, requested, &avd, rc, auditdata);
return rc;
}
这里先讲一下avc及其相关的结构体
avc_node
avc(Access Vector Cache),用来缓存MAC访问控制策略,在进行策略检查的时候,先到avc中进行检查,如果没有找到,则进行根据安全上下文进行计算,将结果缓存到AVC中,关于安全上下文和策略计算,会在后续下一篇中讲到,这里先主要讲AVC。
/goldfish/security/selinux/avc.c
#define AVC_CACHE_SLOTS 512
...
struct avc_entry {
u32 ssid;
u32 tsid;
u16 tclass;
struct av_decision avd;
atomic_t used; /* used recently */
};
struct avc_node {
struct avc_entry ae;
struct list_head li