免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1844 | 回复: 9
打印 上一主题 下一主题

一段代码,求教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-02 15:49 |只看该作者 |倒序浏览
本帖最后由 kitifaye 于 2010-08-02 15:53 编辑

下面是selinux中一个函数代码
int avc_has_perm_noaudit(u32 ssid, u32 tsid,
                         u16 tclass, u32 requested,
                         unsigned flags,
                         struct av_decision *in_avd)
{
        struct avc_node *node;
        struct av_decision avd_entry, *avd;
        int rc = 0;
        u32 denied;

        BUG_ON(!requested);

        rcu_read_lock();

        node = avc_lookup(ssid, tsid, tclass);
        if (!node) {
                rcu_read_unlock();

                if (in_avd)
                        avd = in_avd;
                else
                        avd = &avd_entry;
                rc = security_compute_av(ssid, tsid, tclass, requested, avd);
                if (rc)
                        goto out;
                rcu_read_lock();
                node = avc_insert(ssid, tsid, tclass, avd);
        } else {
                if (in_avd)
                        memcpy(in_avd, &node->ae.avd, sizeof(*in_avd));
                avd = &node->ae.avd;
        }

        denied = requested & ~(avd->allowed);

        if (denied) {
                if (flags & AVC_STRICT)
                        rc = -EACCES;
                else if (!selinux_enforcing || (avd->flags & AVD_FLAGS_PERMISSIVE))
                        avc_update_node(AVC_CALLBACK_GRANT, requested, ssid,
                                        tsid, tclass, avd->seqno);
                else
                        rc = -EACCES;
        }

        rcu_read_unlock();
out:
        return rc;
}

此函数中定义了一个avd_entry(红色),就在一个地方用到,看起来好像没什么作用
是不是多余的?小子菜鸟,请大仙们指点,不胜感激

论坛徽章:
0
2 [报告]
发表于 2010-08-02 16:10 |只看该作者
有很多地方用了 avd 这个啊

论坛徽章:
0
3 [报告]
发表于 2010-08-02 16:16 |只看该作者
多余倒不是,这一句
  1. if (in_avd)
  2.                         avd = in_avd;
  3.                 else
  4.                         avd = &avd_entry;
复制代码
如果传入参数中in_avd有效,就利用那个,否则就自己开个avd的空间使用,大概是这个意思

论坛徽章:
0
4 [报告]
发表于 2010-08-02 16:18 |只看该作者
回复 2# zliming


    avd是用到了,可是avd_entry定义后 也没有初始化赋值什么的
后面就有
                 if (in_avd)
                         avd = in_avd;
                 else
                         avd = &avd_entry;

后面是用到了avd,可是avd_entry再也没用到,不知道这里是什么用?

论坛徽章:
0
5 [报告]
发表于 2010-08-02 16:19 |只看该作者
楼主要不再  学学C语言试试

论坛徽章:
0
6 [报告]
发表于 2010-08-02 16:20 |只看该作者
多余倒不是,这一句如果传入参数中in_avd有效,就利用那个,否则就自己开个avd的空间使用,大概是这个意思: ...
daybreakcx 发表于 2010-08-02 16:16



    avd_entry定义后 也没有初始化赋值什么的,
avd = &avd_entry;
这个有什么用呢?

论坛徽章:
0
7 [报告]
发表于 2010-08-02 16:22 |只看该作者
楼主要不再  学学C语言试试
zhangsuozhu 发表于 2010-08-02 16:19



    您的解释 就是我的学习。。。

论坛徽章:
0
8 [报告]
发表于 2010-08-02 16:27 |只看该作者
avd_entry定义后 也没有初始化赋值什么的,
avd = &avd_entry;
这个有什么用呢?
kitifaye 发表于 2010-08-02 16:20



    提供空间后头调用会往里头写东西啊,如security_compute_av这样的函数,你把地址传入,它往地址里写东西,这样以后你就获得数据了

论坛徽章:
0
9 [报告]
发表于 2010-08-02 16:30 |只看该作者
回复 8# daybreakcx


    明白了。。。

论坛徽章:
0
10 [报告]
发表于 2010-08-02 16:31 |只看该作者
  1. rc = security_compute_av(ssid, tsid, tclass, requested, avd);
复制代码
可能会对avd赋值。
avd是执行av_entry的指针,操作avd也就操作了av_entry
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP