SEAndroid kernel 源码解析2--策略执行

本文深入讲解SEAndroid kernel的策略执行过程,特别是avc_node和list_head的使用。在权限检查中,通过avc_has_perm_noaudit进行策略查找。avc_node存储策略,其list_head链表用于缓存。当策略未在AVC缓存中找到时,会进行策略计算。文章还介绍了avc_search_node函数如何通过avc_hash将avc_node分散到链表中,并通过宏定义遍历链表查找匹配的策略。
摘要由CSDN通过智能技术生成

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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值